Tag: interop

大胆和斜体不符合EPPLUS

我正在使用下面的代码来更新Excel数据格式,在这里我希望标题是粗体和整个斜体格式的数据,但是当我运行代码中的所有function似乎工作正常,除了粗体和斜体。 代码也完成执行没有任何错误,但在Excel文件没有任何单元格的数据在粗体或斜体格式。 public void FormatExcel() { string currentDate = DateTime.Now.ToString("yyyyMMdd"); FileInfo File = new FileInfo("G:\\Selenium\\Test66.xlsx"); using (ExcelPackage excel = new ExcelPackage(File)) { ExcelWorksheet worksheet = excel.Workbook.Worksheets[currentDate]; int totalRows = worksheet.Dimension.End.Row; int totalCols = worksheet.Dimension.End.Column; var headerCells = worksheet.Cells[1, 1, 1, totalCols]; var headerFont = headerCells.Style.Font; headerFont.Bold = true; headerFont.Italic = true; headerFont.SetFromFont(new Font("Times New Roman", […]

如何让Excel在单元格开始时忽略撇号

我正在写一个工具,用Excel工作表同步一个简单的数据库。 数据库中的表中的每个项目对应于工作表中的一行。 我使用C#和Excel interop com界面将Excel工作表读取到工具中,然后在同步之后比较项目的值(即Excel工作表中的一列),以确保它们相等。 昨天我发现一个比较不正确的情况: "'<MedalTitle>' Medal – <MedalDescription>" "<MedalTitle>' Medal – <MedalDescription>" 第二个是我从Excel中读到的,正如你所看到的,它跳过了第一个撇号。 有没有办法告诉Excel将单元格视为文本(不,只是设置单元格的格式不起作用)? 我甚至试图复制VBA中单元格的值( 'hello' ),如下所示: Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean) Target.Offset(1, 0).Value = Target.Worksheet.Range("b2").Value Target.Offset(2, 0).Value = Target.Worksheet.Range("b2").Formula Target.Offset(3, 0).Formula = Target.Worksheet.Range("b2").Formula Target.Offset(4, 0).Formula = Target.Worksheet.Range("b2").Value End Sub 结果是目标单元格的值总是hello' 如果没有办法,我会不得不做一些丑陋的事情 if (dbitem.value[0] == ''' ) { // […]

.NET错误:无法find依赖项“Microsoft.Office.Interop.Excel”

我的同事写了一个驱动Excel的DLL。 当我在.NET应用程序中引用他的DLL时,我得到一个警告: The dependency 'Microsoft.Office.Interop.Excel' could not be found. 我的应用程序将编译。 但是,当我到达使用我的同事的DLL访问Excel的位时,会抛出一个exception,并显示上面的消息。 我们应该有相同的设置: Windows XP Pro SP3,VS2003,.NET 1.1,Office 2003 我的问题似乎与这个问题类似,但我不知道是否相同。 任何帮助或build议感激地收到! 更新: 感谢迄今为止的答案! 我没有添加一个明确的参考Microsoft.Office.Interop.Excel 。 当然,我不应该? 但是 :当我尝试添加此引用时,无法在“添加引用”对话框中findMicrosoft.Office.Interop.Excel 。 大概这意味着我错过了一个DLL? …但我不明白这是怎么发生的?! 更新(固定): @ConcernedOfTunbridgeWells有解决这个问题的答案:安装主互操作程序集。

如何使用Linq写入Excel电子表格?

我正在写一个应用程序,我需要从数据库中检索一些行并将其转储到Excel电子表格中。 我正在使用Linq来检索这些行。 是否有可能将这些行直接转储到Excel工作表中的对应部分(Excel中的一个单元格对应于数据库中的一个单元格)?

用IDisposable清理Excel互操作对象

在我的公司中,发布Excel Interop对象的常用方法是使用IDisposable以下方式: Public Sub Dispose() Implements IDisposable.Dispose If Not bolDisposed Then Finalize() System.GC.SuppressFinalize(Me) End If End Sub Protected Overrides Sub Finalize() _xlApp = Nothing bolDisposed = True MyBase.Finalize() End Sub 其中_xlApp是通过以下方式在构造函数中创build的: Try _xlApp = CType(GetObject(, "Excel.Application"), Excel.Application) Catch e As Exception _xlApp = CType(CreateObject("Excel.Application"), Excel.Application) End Try 客户端使用using-statement来执行有关excel互操作对象的代码。 我们完全避免使用两点规则 。 现在我开始研究如何释放(Excel)互操作对象以及我发现的几乎所有讨论,比如如何正确清理Excel互操作对象或释放Excel对象 ,大多使用Marshal.ReleaseComObject(),但都不使用IDisposable接口。 我的问题是:使用IDisposable Interace发布excel互操作对象有什么缺点吗? 如果是这样,这些缺点是什么。

使用Excel Interop发生的最烦人/最奇怪的事情是什么?

在使用.Net的Excel Interop开发一段时间后,我越来越讨厌有多less“奇怪的事情”发生 – 比如我之前发布的这个问题 – 我的问题 。 我很欣赏,这不是一个直接的问题,更多的是一个经验的合作,但是我认为,找出人们最大的烦恼/奇怪的事情,以及如何克服它们是有帮助的。 这样我可以找出什么问题,我可能遇到未来:) 谢谢

为什么不能设置从Excel互操作的对象?

试图获得对工作表的引用(使用Excel互操作): Excel.Application xl = new Excel.ApplicationClass(); Excel.Workbooks xlWorkBooks = xl.Workbooks; Excel.Workbook xlWorkBook = xlWorkBooks.Open(fileName, 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // Next line crashes Excel.Worksheets xlWorkSheets = (Excel.Worksheets) xlWorkBook.Worksheets; 错误是它不能施放它: 无法将“System .__ ComObject”types的COM对象转换为“Microsoft.Office.Interop.Excel.Worksheets”types的接口。 此操作失败,因为IIC“{000208B1-0000-0000-C000-000000000046}”接口的COM组件上的QueryInterface调用失败,原因是出现以下错误:没有支持此接口(exception来自HRESULT:0x80004002(E_NOINTERFACE)) 。 我的投射不正确?

无法访问Excel文件

我正在开发一个Windows服务,生成一个报告。 这份报告有一个模板。 这个模板是在excel文件中准备的。 该文件被复制到输出文件夹。 在开发过程中,我像控制台应用程序一样启动了服务,并且没有任何问题访 然后我准备了一个服务安装程序。 该服务安装在Local System帐户下。 所以这个excel模板文件被标记为内容,并且与可执行文件一起被复制到安装目录。 但是,当服务启动时,excel似乎无法访问此文件。 该服务已安装到c:\Program Files (x86)\Our Company\Service Name\ 。 目标操作系统是Windows Server 2008.testing时,我使用Windows 7并运行相同的问题。 我使用下面的代码来访问Excel。 using Excel = Microsoft.Office.Interop.Excel; //… Excel.Application xlApp = new Microsoft.Office.Interop.Excel.Application(); //the following line throws an exception Excel.Workbook xlWorkBook = xlApp.Workbooks.Open(@"path"); 我也尝试复制excel模板文件到一些临时目录(服务有权写 – 这是testing),并尝试从那里打开它,但没有成功(虽然这种变种适用于控制台应用程序好)。 错误信息是: Microsoft Office Excel不能访问文件/path/。 有几个可能的原因: 1. The file name or path […]

使用包装对象来正确清理Excel互操作对象

所有这些问题: 通过.NETclosures时Excel 2007挂起 如何正确清理C#中的Excel互操作对象 如何正确清理C#中的互操作对象 与使用它们后C#不能正确释放Excel COM对象的问题斗争。 解决这个问题主要有两个方向: 当不再使用Excel时,终止Excel进程。 注意明确地将每个用于variables的COM对象首先分配给一个variables,并保证每个variables都执行Marshal.ReleaseComObject。 有些人说,2太繁琐了,你是否忘记在代码的某些地方忘记遵守这条规则,总会有一些不确定性。 仍然1似乎肮脏,容易出错,我也想在一个有限的环境试图杀死一个进程可能会引发安全错误。 所以我一直在考虑通过创build另一个模仿Excel对象模型的代理对象模型(对于我来说,实现我实际需要的对象就足够了)来解决2。 原则如下: 每个Excel Interop类都具有包装该类的对象的代理。 代理在其终结器中释放COM对象。 代理模仿Interop类的接口。 最初返回一个COM对象的任何方法都改为返回一个代理。 其他方法只是将实现委托给内部COM对象。 例: public class Application { private Microsoft.Office.Interop.Excel.Application innerApplication = new Microsoft.Office.Interop.Excel.Application innerApplication(); ~Application() { Marshal.ReleaseCOMObject(innerApplication); innerApplication = null; } public Workbooks Workbooks { get { return new Workbooks(innerApplication.Workbooks); } } } public class Workbooks { […]

防止Excel退出

我缺less一个Excel.Application.Quit或一个Excel.Application.BeforeQuit事件。 有没有人知道模拟这些事件的解决方法? 我通过COM Interop从C#WinForms应用程序访问Excel。 给定一个Excel.Application对象,我怎么能: 最好防止Excel退出? 如果这是不可能的,我怎么能至less注意到 Excel退出? 请注意:因为我有一个Excel的应用程序的COM引用,当用户退出 Excel时, Excel进程不会退出 。 虽然这听起来是矛盾的,但事实就是如此。 通过“退出”,我的意思是用户点击窗口右上angular的“退出”或“十字button”。 窗口closures,文件被卸载,加载项被卸载,以及Excel除了我不知道的东西之外的任何东西。 但是我仍然可以使用Application对象来“恢复”进程并使Excel重新可见,尽pipe加载项然后丢失了,而且我还不确定尚未定义的状态是什么。 为了摆脱这个问题,我希望在一开始就取消退出(如果存在的话,可以考虑BeforeQuit Cancel = true ),或者至less在Excel退出时通知,这样我就可以释放COM对象使stream程真正退出,下一次我再次需要Excel时,我会知道我需要先启动它。 不幸的是,这是一个恶性循环: 只要Excel运行,我需要COM对象 。 所以我不能在 Excel退出前处理它们。 另一方面,只要COM对象存在,即使Excel假装退出,进程也不会退出,所以我不能等待进程退出事件或类似事件。 我有一种令人不快的感觉,就是我要把头撞到一堵砖墙上。