我正在编写一些 C# VSTO 代码来读取 Microsoft Word 文档并将其保存到过滤的 HTML。当我在通用 Word 文档上执行此功能时,html 文件的输出使用 Windows 字符集,如下所示:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Run Code Online (Sandbox Code Playgroud)
如果我打开一个文档并转到 File->Options->Advanced->Web Options,我可以选择 UTF8,结果过滤后的 html 文档输出如下所示:
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
Run Code Online (Sandbox Code Playgroud)
我想编写 C# 代码,将任何Word 文档保存为使用 utf-8 过滤的 html。在做了一些研究之后,我发现有些人说“SaveAs2”功能不起作用(即使 Microsoft 将其记录为一项功能)。这意味着,此代码对我不起作用:
doc.SaveAs2("C:\\Temp\\Test.htm", MsWord.WdSaveFormat.wdFormatFilteredHTML, Encoding: "65001");
Run Code Online (Sandbox Code Playgroud)
(注意:我尝试将 65001 放在引号中而不使用引号......既不会抛出错误,也不会起作用)。
接下来,我继续为文档设置 Web 选项,如下所示:
doc = app.Documents.Open("C:\\Temp\\Test.docx");
doc.WebOptions.Encoding = Microsoft.Office.Core.MsoEncoding.msoEncodingUTF8;
doc.SaveAs2(destFile, MsWord.WdSaveFormat.wdFormatFilteredHTML);
Run Code Online (Sandbox Code Playgroud)
据我所知,上面的代码执行与我手动打开文件完全相同的功能,转到文件->选项...,设置为 UTF-8 并将文件保存到过滤的 html,但输出仍然看起来像这个:
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
Run Code Online (Sandbox Code Playgroud)
有没有办法强制 Microsoft Word 将文件输出为 UTF-8,而无需先手动配置文档?
现在我有一个正则表达式可以防止用户输入任何特殊字符。唯一允许的字符是 A 到 Z、0 到 9 或空格。
我想改进这个正则表达式以防止以下情况:
我现在用来防止特殊字符的正则表达式如下所示,看起来工作得很好,即:
^[a-zA-Z0-9 ]+$
Run Code Online (Sandbox Code Playgroud)
按照其他一些想法,我尝试了所有这些选项,但它们不起作用:
^\A\s+[a-zA-Z0-9 ]+$\A\s+
/s*^[a-zA-Z0-9 ]+$/s*
Run Code Online (Sandbox Code Playgroud)
我可以帮我处理这段代码吗?同样,我只想要字母 AZ、数字 0-9,并且没有前导或尾随空格。
谢谢。
我构建了一个Microsoft Word的附加组件.当用户单击某个按钮时,它会运行许多将Microsoft Word文档列表导出为Filtered HTML的进程.这很好用.
代码落后的地方是处理大量文件.文件转换完成后我调用下一个函数,应用程序崩溃,我从Visual Studio获取此信息:
托管调试助手'DisconnectedContext'在'C:\ Program Files\Microsoft Office\root\Office16\WINWORD.EXE'中检测到问题.
附加信息:此RuntimeCallableWrapper转换到COM上下文0x56255b88失败,并显示以下错误:系统调用失败.(来自HRESULT的异常:0x80010100(RPC_E_SYS_CALL_FAILED)).这通常是因为创建此RuntimeCallableWrapper的COM上下文0x56255b88已断开连接或正忙于执行其他操作.从当前COM上下文释放接口(COM上下文0x56255cb0).这可能会导致损坏或数据丢失.要避免此问题,请确保所有COM上下文/公寓/线程都保持活动状态并可用于上下文转换,直到应用程序完全使用表示其中的COM组件的RuntimeCallableWrappers完成.
经过一些测试,我意识到如果我只是在文件转换后删除所有代码,就没有问题.要解决此问题,我将其余代码放在另一个按钮中.
问题是我不想给用户两个按钮.阅读各种其他线程后,听起来我的代码有内存或线程问题.我正在阅读的答案并没有帮助我真正理解下一步该做什么.
我觉得这就是我想要做的事情:
1-运行转换.2-转换中关闭线程/清理内存问题.3-继续运行代码.
不幸的是,我真的不知道怎么做#2或者甚至可能.非常感激您的帮忙.
我已经阅读了关于Stack Overflow和其他地方的许多问题,这些问题描述了如何将文本框绑定到类,但是在编译时如果没有收到VS的错误,我似乎甚至无法使基础工作。
(1)我要完成的是显示一个类的属性的文本。
(2)当用户修改该文本时,我希望该属性自动更新。
不幸的是,我什至无法超越(1)。
班级:
class BookProperties : INotifyPropertyChanged
{
private string _bookTitle;
public string bookTitle { get { return _bookTitle; } set { SetField(ref _bookTitle, value, "bookTitle"); } }
#region handle property changes
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
}
protected bool SetField<T>(ref T field, T value, string propertyName)
{
if (EqualityComparer<T>.Default.Equals(field, value)) return false;
field = value;
OnPropertyChanged(propertyName);
return true;
}
#endregion …Run Code Online (Sandbox Code Playgroud) 我正在上课(在Lynda.com上进行基于计算机的培训),教师继续讲述如何使用"发布"来处理对象.本课程创建于2011年,显然Apple已更新其产品,以便自动为您完成发布.虽然我知道我可以回到手动模式并自行发布项目(例如关闭ARC),我的问题是:最佳做法是什么?我应该打开ARC还是关掉它?也许你有一个很好的例子,我应该何时做出这个选择?
此外,如果我完全不在此基础上,您的帮助也会受到赞赏:-)
谢谢.