Tag: office interop

使用C#读取Outlook邮件

我尝试连接到Outlook邮件时使用以下代码。 现在,我必须做错事,因为我试图获取收件箱邮件,我总是得到0邮件(当不是这种情况时)。 这是我的代码 Microsoft.Office.Interop.Outlook.NameSpace nameSpace = application.GetNamespace(“MAPI”); nameSpace.Logon(“”, “”, Missing.Value, Missing.Value); inboxFolder = nameSpace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); Console.WriteLine(“Folders: {0}”, inboxFolder.Folders.Count); 我的Outlook个人资料中有几个电子邮件帐户。 当我写下面的内容时 Console.WriteLine(“Accounts: {0}”,nameSpace.Accounts.Count); Console.WriteLine(“Name: {0}”, nameSpace.Accounts[1].DisplayName); 帐户总数正确显示,我真正想要访问的帐户的名称也是如此(索引1)。 现在,问题是我需要访问该帐户中的特定文件夹。 我该怎么做呢?

使用c#写入现有Excel文件

我试图打开(或创建一个新的xls)Excel文件并为其写一些值。 虽然,如果我只是创建一个新的xls文件,下面的程序工作得很好,我遇到了一些问题 **mWorkBook = oXL.Workbooks.Open (path, 0, false, 5, “”, “”, false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, “”, true, false, 0, true, false, false);** 这是错误:无法访问“LOG.xls”。 该文件可能已损坏,位于未响应的服务器上或只读。 它不是只读的,它没有被破坏(因为有时文件是在运行时创建的)。 那有什么问题呢? private static Microsoft.Office.Interop.Excel.Workbook mWorkBook; private static Microsoft.Office.Interop.Excel.Sheets mWorkSheets; private static Microsoft.Office.Interop.Excel.Worksheet mWSheet1; private static Microsoft.Office.Interop.Excel.Application oXL; private void btnSignIn_Click ( object sender, EventArgs e ) { string path = “D:\\LOG.xls”; if(!File.Exists(path)) […]

使用C#捕获MS Word的keydown事件

我正在尝试开发一个办公室附加组件,需要使用C#在MS-Word上捕获keydown事件。 谁能举个例子说明我怎么能这样做?

如何从字节数组创建Microsoft.Office.Interop.Word.Document对象,而不将其保存到磁盘?

如何从字节数组创建Microsoft.Office.Interop.Word.Document对象,而不使用C#将其保存到磁盘? public static int GetCounterOfCharacter(byte[] wordContent) { Application objWord = new Application(); Microsoft.Office.Interop.Word.Document objDoc = new Document(); //objDoc = objWord.Documents.Open((“D:/Test.docx”); i want to create document from byte array “wordContent” return objDoc.Characters.Count; }

Office文档为PDF

我已经看到了一些关于这个的线索,但在我的搜索中没有得到非常直接的答案。 我有一个Web应用程序需要接受doc,docx,xl​​s,xlsx文件并将它们转换为PDF。 现在我们有一个使用Microsoft.Office.Interop.Word库的进程,它打开文档,将其打印到PS文件,然后GPL GhostScript将PS文件转换为PDF。 这个过程很有效,但总体而言有几个步骤,而这最初是在几年前开发的,当时找到PDF打印驱动程序并对它进行接口更加困难。 本着更新的精神,我正在寻找一种可能更好的方法来处理这个问题。 主要原因是在我们的应用程序中,我们使用Web服务调用来执行转换过程的提升操作,使用较新的Windows服务器,特别是对于用于开发的Window 7,即使模拟也打开文件的能力导致一些问题使用Interop库。 所有这些我肯定可以理解并解决,但我想知道是否有更新更好的方法来解决这个问题。 我已经研究过PDF995,但是我找不到以编程方式进入并直接将文件打印到PDF的好方法。 他们提供的代码是用C ++编写的,我没有找到如何模仿C#中的调用。

如何将所有者窗口传递给Show()方法重载?

我正在处理Excel添加,在用户单击function区栏上的按钮后打开一个winform。 此按钮需要是非模态的,以便用户仍然可以与父窗口进行交互,但它也必须始终保持在父窗口的顶部。 为了实现这一点,我试图将父窗口作为参数传递给Show()方法。 这是我的代码: Ribbon1.cs private void button2_Click(object sender, RibbonControlEventArgs e) { RangeSelectForm newForm = new RangeSelectForm(); newForm.Show(this); } 此代码的问题是“this”一词引用了function区类,而不是父窗口。 我也试过传入Globals.ThisAddIn.Application.Windows.Parent。 这导致运行时错误“’System.Windows.Forms.Form.Show(System.Windows.Forms.IWin32Window)’的最佳重载方法匹配’具有一些无效参数”。 将父窗口传递给Show()的正确方法是什么? 如果它是相关的,这是使用C#在.NET 4.0上编写的Office 2010应用程序。 编辑—基于Slaks答案 using Excel = Microsoft.Office.Interop.Excel; … class ArbitraryWindow : IWin32Window { public ArbitraryWindow(IntPtr handle) { Handle = handle; } public IntPtr Handle { get; private set; } } private […]

无法转换COM对象 – Microsoft Outlook和C#

我已编写此代码以查看Outlook邮箱中的未读项目,以下是代码: Microsoft.Office.Interop.Outlook.Application app; Microsoft.Office.Interop.Outlook.Items items; Microsoft.Office.Interop.Outlook.NameSpace ns; Microsoft.Office.Interop.Outlook.MAPIFolder inbox; Microsoft.Office.Interop.Outlook.Application application = new Microsoft.Office.Interop.Outlook.Application(); app = application; ns = application.Session; inbox = ns.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox); items = inbox.Items; foreach (Microsoft.Office.Interop.Outlook.MailItem mail in items) { if (mail.UnRead == true) { MessageBox.Show(mail.Subject.ToString()); } } 但在foreach循环中我收到此错误: “无法将’System .__ ComObject’类型的COM对象强制转换为接口类型’Microsoft.Office.Interop.Outlook.MailItem’。此操作失败,因为QueryInterface调用COM组件为IID'{00063034-0000- 0000-C000-000000000046}’由于以下错误而失败:不支持此类接口(HRESULTexception:0x80004002(E_NOINTERFACE))。 你能帮我解决一下这个错误吗?

c#word interop查找并替换所有内容

我有一些代码来替换单词2010 docx中的文本。 object fileName = Path.Combine(System.Windows.Forms.Application.StartupPath, “document.docx”); Microsoft.Office.Interop.Word.Application wordApp = new Microsoft.Office.Interop.Word.Application { Visible = true }; Microsoft.Office.Interop.Word.Document aDoc = wordApp.Documents.Open(ref fileName, ReadOnly: false, Visible: true); aDoc.Activate(); Microsoft.Office.Interop.Word.Find fnd = wordApp.ActiveWindow.Selection.Find; fnd.ClearFormatting(); fnd.Replacement.ClearFormatting(); fnd.Forward = true; fnd.Wrap = Microsoft.Office.Interop.Word.WdFindWrap.wdFindContinue; fnd.Text = “{id}”; fnd.Replacement.Text = “123456”; fnd.Execute(Replace: WdReplace.wdReplaceAll); 这没有格式化。 但是当{id}被格式化时,它不会替换文本。 如何使此代码忽略格式化?

使用Micorsoft.Office.Interop(对象库)通过IIS 7读取word doc时出错

当从IIS运行代码时,我在阅读文档时遇到问题。 它不是在阅读文档并抛出错误“在尝试保存activedocument时没有文档是opne。”。 m_word.Documents.Open(ref FileName, ref missing, ref readOnly, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing, ref missing); m_word.ActiveDocument.SaveAs2(ref FileName_rtf, ref FileFormat, ref missing1, ref missing1, ref missing1, ref missing1, ref missing1, ref missing1, ref missing1, ref missing1, ref […]

如何使用word interop一次一个地添加项目到word文档的新行

我正在尝试将这三种类型的内容添加到word doc中。 这就是我现在尝试这样做的方式。 但是,每个项目都会替换最后一个项目。 添加图像始终会添加到页面的开头。 我有一个循环调用函数来创建标题和表,然后添加图像。 我认为问题是范围。 我使用对象start = 0的起始范围; 如何让这些一次添加一个到文档中的新行? foreach (var category in observedColumns) { CreateHeadersAndTables(); createPictures(); } 添加标题: object start = 0; Word.Range rng = doc.Range(ref start , Missing.Value); Word.Paragraph heading; heading = doc.Content.Paragraphs.Add(Missing.Value); heading.Range.Text = category; heading.Range.InsertParagraphAfter(); 添加表格: Word.Table table; table = doc.Content.Tables.Add(rng, 1, 5); 添加图片: doc.Application.Selection.InlineShapes.AddPicture(@path);