Tag: excel interop

IMessageFilter无法处理0x800AC472(VBA_E_IGNORE)是否使实现IMessageFilter无关紧要?

从msdn看来, IMessageFilter并不处理所有的exception,例如,在某些时候,办公应用程序“暂停”它们的对象模型,此时不能被调用并抛出: 0x800AC472 (VBA_E_IGNORE) 为了解决这个问题,你必须把你的呼叫放在一个循环中,等待它的成功: while(true) { try { office_app.DoSomething(); break; } catch(COMException ce) { LOG(ce.Message); } } 我的问题是:如果这个样板代码对于每个应用程序的对象模型的调用都是必需的,那么在实现IMessageFilter是否有任何意义?

如何使用不同的名称复制工作表 – C#和Excel Interop

我想简单地复制我的工作簿中的一张,并给它一个不同的名字。 var pointName1 = workbook.Worksheets["PointName1"] as Worksheet; pointName1.Copy(); // How do I access this newly created sheet? 理想情况下,我希望能够写出这样的方法 pointName1.CopyTo("New Sheet"); 其中“新表”是“PointName1”的重命名副本。 有时PointName1将成为工作簿中的唯一工作表,其他时间将会有其他工作簿。

.NET 4.0 Excel Interop与dynamic集合的问题

在Excel中,您可以使用XValues从一个系列对象中返回一个dynamic数组System.Object[*] 。 在.NET 3.5中,您可以通过将其转换为数组来访问此对象中的元素,即: var values = (Array)series.XValues; 在.NET 4.0中,这不再起作用,并且消息 “无法投射”System.Object [*]“types的对象来键入”System.Object []“” 给出。 有任何想法吗? 以下不起作用: 把它铸造成dynamic的。 将其转换为System.Object[*] 。 只需将对象放置在每个循环中。 尝试直接使用values[1]访问值,而不是当作为dynamic投射时。 然而,数组内的值在debugging器中显示。

在使用C#.NET生成的Excel表格中显示页码

有没有人有一个想法,如何包括或input在使用C#代码生成的Excel表中的页码。 我使用Microsoft.Office.Interop.Excel中提供的库来生成文件。 但是在默认的输出中,我看不到页码。 我知道要启用此通过 Excel的选项(查看 – >页眉和页脚…),但我想通过C#自动化。 这是可能的,如果是的,请分享相同的片段。 感谢不断学习者

使用Excel InteropclosuresExcel应用程序而不保存消息

我正在使用Excel Interop COM对象。 我正在写一个方法,我打开和closures一个Excel应用程序,然后打开一个Excel工作簿和工作表。 在完成他们的工作后,我正在closures应用程序和工作簿。 我的问题是,这个方法可以重复调用几次,当表和应用程序正在closures时,我从Excel应用程序获取消息,如果我想保存我所做的更改。 该方法卡住,直到我按“否”,但我不能告诉用户每次按下它。 如何closures应用程序而不收到此消息或至less通过代码回答? 这些是我用来closures应用程序和工作簿的方法: private void FreeWorkSheetResources(Excel.Worksheet sheet) { Marshal.ReleaseComObject(sheet); sheet = null; } private void FreeWorkBookResources() { if (_excelSheets != null) { Marshal.ReleaseComObject(_excelSheets); _excelSheets = null; } _excelWorkBook.Close(); Marshal.ReleaseComObject(_excelWorkBook); _excelWorkBook = null; } private void FreeApplicationResources() { _app.Quit(); Marshal.ReleaseComObject(_app); _app = null; GC.Collect(); } 这就是我使用它们的方式: if (_app == null) […]

通过.NET源代码中的公式将数据导入到Excel电子表格中的适当技术是什么?

我希望能够允许用户在Excel中的单元格中input自定义公式,该公式将订阅由外部.NET应用程序提供的数据。 例如,用户可能会input… =getCurrentValue("ABC") 有一个外部.NET(C#)应用程序每分钟决定“ABC”的值。 单元格应显示来自外部应用程序的“ABC”的初始值,并在外部应用程序发送新值时更新。 在过去,我认为外部应用程序将是一个DDE服务器,公式将是一个DDE客户端公式,但DDE显然已经死亡。 什么是“正确”的技术来做到这一点? 请注意,电子表格需要通过公式提取数据。 信息不会进入固定的模板excel文件,而是进入用户input公式的任何电子表格。 谢谢, 约翰

使用Interop Excel保存XLS

当前设置: 所以,我可以使用下面的代码将文件保存为XLS: _myWorkbook.SaveAs("FileName.xls", Excel.XlFileFormat.xlWorkbookNormal) 我也可以使用下面的代码将文件保存为XLSX(因为我使用的是Office 2010): _myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlWorkbookDefault) 问题: 我已经尝试(不成功)使用以下代码将该文件保存为XLSX: _myWorkbook.SaveAs("FileName.xlsx", Excel.XlFileFormat.xlExcel12) 为什么这不起作用? 最后我检查了Excel 12是Excel 2007(支持XLSX的版本)。 我错过了什么吗? (对于那些感兴趣的,我得到一个This extension can not be used with the selected file type错误)

Microsoft.Office.Interop.Excel:如何将边框应用到一个单元格

我正在寻找使用Microsoft.Office.Interop.Excel库将边框应用到一个单元格。 我正在运行一个while循环search某个列中的空单元格,一旦find单元格我想对其应用边框。 我知道有很多关于这个使用范围的论坛,但我不能使用范围的function,因为我不知道它应用到什么单元格。 我的想法是: (Excel.Range)xlWS.Cells [row,1] .Borders.LineStyle =(Whatever Value); 有什么build议? (除了链接到其他论坛,我已经看了很多表格)?

具有多个区域的Excel Get_Range

我试图从Excel,其中有多个领域指定的范围,本质上我有… int StartColumn int EndColumn int [] ColumnsToSkip 当你把这些结合在一起时,就有可能产生一个非连续区域的范围。 不幸的是,我不能完全弄清楚这个呼叫… MSDN不是很有用… 工作表单; sheet.get_Range( what goes in here??? ); 任何人提供任何帮助? 干杯。

使用C#Interop从Excel中以明文forms获取所有工作表名称?

我正在使用VS2010 + Office Interop 2007来尝试从5到6页的Excel电子表格中获取一些特定的电子表格名称。 我所做的只是在制表符分隔的文本文件中保存所需的一些电子表格,以供进一步处理。 所以对于我得到的三个电子表格名称,每个名称都有自己的制表符分隔的文本文件。 我可以通过Interop将文件保存为制表符分隔,但假设我知道给定的页面名称是什么。 我已经被告知,每个页面名称不会遵循严格的命名惯例,但是在寻找所需的名称时,我可以考虑多个名称,例如“RCP”,“rcp”,“Recipient”等。 我的问题是,我可以在某种索引中获得所有的电子表格页面名称,所以我可以遍历它们并尝试find我需要的三个名称? 这将比尝试通过bajillion try / catches来抓取“RCP”,“rcp”,“Recipient”页面好得多。 我很接近,因为我可以通过以下方式在Excel电子表格中获得COUNT个页面: Excel.Application excelApp = new Excel.Application(); // Creates a new Excel Application excelApp.Visible = true; // Makes Excel visible to the user. // The following code opens an existing workbook string workbookPath = path; Excel.Workbook excelWorkbook = null; try { excelWorkbook […]