Tag: office interop

在C#中正确处理COM互操作对象,尤其是MS Office应用程序

我正在开发一个依赖于多个Microsoft Office产品的应用程序,包括Access,Excel,Word,PowerPoint和Outlook等。 在对互操作进行研究时,我发现从VS2010和.NET 4开始,我们感谢不再需要经历PIA的噩梦。 此外,我一直在阅读很多关于妥善处理物品的文章,最明智的就是这个 。 然而,该文章已有5年历史,关于AFAIK主题的权威出版物并不多。 以下是上述链接中的代码示例: ‘ Cleanup: GC.Collect() GC.WaitForPendingFinalizers() GC.Collect() GC.WaitForPendingFinalizers() Marshal.FinalReleaseComObject(worksheet) oWB.Close(SaveChanges:=False) Marshal.FinalReleaseComObject(workbook) oApp.Quit() Marshal.FinalReleaseComObject(application) 我想知道的是今天的标准,如果我希望在未来几年支持我的申请,我应该注意什么? 更新:一些可靠文章的链接将受到高度赞赏。 顺便说一句,这不是服务器端应用程序。 这将在计算机实验室中运行,我们让用户与我们实例化的办公产品进行交互。 发现它: 这篇由三部分组成的文章可能是最接近我期望找到的权威帐户的文章。

支持Office Automation的不同Office版本

我们创建了一个使用Office 2007(Excel 2007)从Excel工作表读取数据的应用程序。 然而。 我注意到,当我想在安装了Office 2003的系统上部署应用程序时,它会崩溃,因为此版本的办公室需要引用其他PIA(和其他dll)。 我是否需要编译不同版本的应用程序才能支持不同版本的Office,或者是否有更优雅的解决方案来解决此问题? 我使用Visual Studio 2010(C#)和.Net 4.0平台。

如何从模板以编程方式创建Word文档

我试图在microsoft office Word中创建大约600个报告。 文档中填充了数据库中的数据和本地驱动器上的图像。 我已经想到,我可以在visual studio 2010中创建一个Word模板项目,并对模板进行编程,这样当您输入单个值(id-number)时,它会自动填写整个文档。 我很有信心这是可能的。 唯一的问题是。 如何遍历数据库中的所有条目,根据模板打开新文档并设置id-value? for(int i = 0; i < idnumbers.Count(); i++) { Word.Application app = new Word.Application(); Word.Document doc = app.Documents.Add(@"C:\..\WordGenerator\bin\Debug\WordTemplate.dotx"); //input the id-number below: HOW?? doc.SaveAs(FileName: @"c:\temp\test.docx"); } 应用程序应该只运行一次,生成报告,而且不一定要快。 它必须易于开发。 这里的问题是,似乎在Word项目之外无法访问DocumentBase对象。 替代Microsoft.Office.Interop.Word.Document没有像SelectContentControlsByTitle这样的function,它允许我查找和设置我的ContentControls。 而这正是我需要做的…… 这就是我的代码现在将文本插入我的字段:Word.Application app = new Word.Application(); Word.Document doc = app.Documents.Add(@”C:\..\test.dotx”); foreach (Word.ContentControl cc in doc.SelectContentControlsByTitle(“MyCCTitle”)) […]

如何使Outlook Compose窗口最顶级?

我正在创建一个Outlook消息。 有时Outlook Compose窗口出现在其他窗口后面。 我怎样才能成为最顶级的? String address = “someone@example.com”; Outlook.Application oApp = new Outlook.Application(); Outlook._MailItem oMailItem = (Outlook._MailItem)oApp.CreateItem(Outlook.OlItemType.olMailItem); oMailItem.To = address; oMailItem.Subject = “Help”; oMailItem.BodyFormat = Outlook.OlBodyFormat.olFormatPlain; oMailItem.Attachments.Add(“H:\\file.txt”); oMailItem.Body = “Call me”; // body, bcc etc… oMailItem.Display(true); 我正在使用WinForm和.Net 2.0(目标)

如何在MS Word Keypress上举办活动

我正在开发一个MS-Word插件,我的代码必须能够访问用户通过键盘输入的字母。 private void ThisDocument_Startup(object sender, System.EventArgs e) { this.SelectionChange += new SelectionEventHandler(ThisDocument_SelectionChange); } void ThisDocument_SelectionChange(object sender, SelectionEventArgs e) { MessageBox.Show(e.Selection.Text); } 我认为SelectionChange事件可以给我文本,但事件不是在按键时引发的,有没有办法在按键时触发事件? 此外,如果有更简单的方法或提供function的开源项目,那将是受欢迎的。

以编程方式将换行符(不是段落中断)插入到Word文档中

我在C#中使用Office Developer Tools for Visual Studio 2013。 从Word 2007开始,添加“\ n”字符会添加一个段落(比Word中的换行符增加更多空间)。 如何在文档中添加换行符? 我试过“\ n”,“\ r”和“\ r \ n”所有这些似乎都添加了段落。

asp.net中的办公自动化问题。 如果我知道如何,我可以使用开放式办公室等替代方案

我有一个ASP.NET 2.0 Web应用程序,应该上传一个ppt文件,然后将其幻灯片提取到图像。 为此我导入了office.dll和Microsoft.Office.Interop.PowerPoint.dll程序集并编写了以下代码 public static int ExtractImages(string ppt, string targetPath, int width, int height) { var pptApplication = new ApplicationClass(); var pptPresentation = pptApplication.Presentations.Open(ppt, MsoTriState.msoTrue, MsoTriState.msoFalse, MsoTriState.msoFalse); var slides = new List(); for (var i = 1; i <= pptPresentation.Slides.Count; i++) { var target = string.Format(targetPath, i); pptPresentation.Slides[i].Export(target, "jpg", width, height); slides.Add(new FileInfo(target).Name); } […]

如何从C#代码中捕获Microsoft Access VBA调试错误?

我有一个C#程序,它打开几个Microsoft Access文件,并从每个文件中执行function。 本质上,代码看起来像这样: Microsoft.Office.Interop.Access.Application app = new Microsoft.Office.Interop.Access.Application(); app.Visible = true; app.OpenCurrentDatabase(accessFileFullPath, false, “”); //Call the function app.Eval(function); 但是,当VBA代码中发生调试错误时,我想将其捕获到我的C#程序中。 请不要回答:“在您的VBA程序中捕获错误”。 由于我不会涉及的原因,这是不可能的。 我过去使用的一种方法是让一个线程间歇性地监视任何Visual Basic Debug窗口的句柄(FindWindowEx Win32函数返回非零值)。 我不喜欢这种方法,也不想继续使用它。 我找到了这个适用于Microsoft Excel的线程 。 本质上,它使用Microsoft.VisualBasic.CallByName()函数,它显然可以被捕获在try / catch块中,而无需用户交互。 但是,我无法使用Microsoft Access – 主要是因为我无法弄清楚如何使用此命令调用函数/ sub。 任何建议都将真诚地感谢! 编辑:正如我在下面的一个答案中提到的,我尝试将Eval()包装在try / catch块中,我的C#程序似乎忽略它,直到用户点击“Microsoft Visual Basic”上的“结束”按钮“错误对话框。 我不希望任何用户交互,而是想要捕获VBA错误以便在我的C#程序中处理。

使用Word Interop在C#中进行拼写检查

我正在使用word.dll (Word Interop API)在C#中编写拼写检查应用程序。 我想检查哪些拼写不正确,并据此获得错误单词的建议。 我从网上得到了一个示例代码,我无法理解以下命令的参数: Microsoft.Office.Interop.Word._Application.GetSpellingSuggestions (string, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object, ref object) 我想知道ref object的含义是什么? 我想知道他们的意思。

如何使用Microsoft.Office.Interop打开文件时禁用弹出窗口

如只读确认,其他警报。 这些弹出窗口怎么办? 还是忽略它们?