Tag: interop

C#将Excel 2007(xlsx)文件转换为Excel 2003(xls)文件

我正在一个控制台应用程序,将xlsx文件转换为xls文件。 我不想从xlsx重命名为xls,因为它将在Excel 2007中打开,但它将显示为在Excel 2003中损坏的文件。寻找一种方法,将加载文件,然后将它保存为xls格式。 我目前的代码只需将xlsx重命名为xls string fileName = @"C:\Users\L-3\Desktop\my.xlsx"; string svfileName = @"C:\Users\L-3\Desktop\ssc\my1.xls"; object oMissing = Type.Missing; var app = new Microsoft.Office.Interop.Excel.Application(); var wb = app.Workbooks.Open(fileName, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing); wb.SaveAs(svfileName, XlFileFormat.xlOpenXMLTemplate, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlExclusive, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); app.Quit();

基于非零的multidimensional array

我使用Interopt.Excel API从电子表格中提取单元格。 当我打电话时: object[,] rangeValues = (object[,])range.get_Value(XlRangeValueDataType.xlRangeValueDefault); 并设置一个断点并检查rangeValues ,我看到从[1,1]“foo”,[1,2]“bar”等元素开始 但是,如果我做string[,] test = new string[2, 2] { { "one", "two" }, { "three", "four" } }; 元素从[0,0]开始。 Excel API如何构造具有空元素的multidimensional array? 我试图添加null,但你仍然有一个[0,0]条目。 他们的对象没有显示出来。

将.net方法公开为Excel函数?

我有一套坐在.Net DLL中的计算方法。 我想使Excel(2003+)用户可以使用这些方法,以便他们可以在电子表格中使用这些方法。 例如,我的.net方法: public double CalculateSomethingReallyComplex(double a, double b) {…} 我想让他们只需在随机单元格中input公式即可调用此方法: =CalculateSomethingReallyComplex(A1, B1) 什么是最好的方法来完成这个?

如何解决例外:呼叫被被叫方拒绝。 (从HRESULTexception:0x80010001(RPC_E_CALL_REJECTED))在C#中?

我已经在控制台应用程序中编写了一个C#代码来打开两个excel,并将数据从一个excel复制并粘贴到另一个excel。 它工作正常,直到目的地excel的可见性是真实的。 但是我需要在执行时隐藏excel。 所以我改变了可见性为false。 喜欢, _destExcelApp = new Excel.ApplicationClass(); _destExcelApp.Visible = false; 现在它显示出一个exception 呼叫被被叫方拒绝。 (从HRESULTexception:0x80010001(RPC_E_CALL_REJECTED)) 如何解决这个问题?

如何使用Excel.Range.set_Value()指定单个单元格的格式

当我把整个表格写入一个excel工作表时,我知道要一次处理整个范围,而不是写入单个单元格。 然而,有没有办法指定格式,因为我正在填充我要导出到Excel的数组? 以下是我现在所做的: object MissingValue = System.Reflection.Missing.Value; Excel.Application excel = new Excel.Application(); int rows = 5; int cols = 5; int someVal; Excel.Worksheet sheet = (Excel.Worksheet)excel.Workbooks.Add(MissingValue).Sheets[1]; Excel.Range range = sheet.Range("A1", sheet.Cells(rows,cols)); object[,] rangeData = new object[rows,cols]; for(int r = 0; r < rows; r++) { for(int c = 0; c < cols; c++) { someVal […]

在Excel中使用C#复制单元格

如何复制到目标工作表中的特定行? 我需要将A1到J10从一个Excel中的表单复制到第二个Excel表单中从A15开始的位置。 我怎样才能在c#中实现这一点? 在下面的Copy方法中,似乎没有选项来指定目标Excel表单中的位置。 ObjWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)ObjWorkBookTemp.Sheets[1]; ObjWorkSheet.Copy(Type.Missing, ObjWorkBookGeneral.Sheets[1]);

互操作程序集embedded到.NET 4.0中时缺lessExcel get_Range

我build立一个引用COM interop DLL的程序集。 如果通过在引用的属性(VS2010)中将Embed Interop Types设置为True来embeddedCOM互操作types,则在运行时会发生错误“对象不包含get_Range的定义”。 如果COM互操作types没有embedded,则不会发生错误。 有谁知道为什么应该省略一个特定的方法,Worksheet.get_Range或如何解决这个问题或有任何其他相关的见解? 我应该感激任何帮助。 interop dll包含对Worksheet.get_Range(object,[object])的引用。 在我的调用程序集上使用reflection器时,没有提及Worksheet下的get_Range。 我embedded的互操作程序集是从Excel9.olb生成的。 我不使用PIA作为应用程序的目标多个Excel版本。

悬挂互操作COM对象的问题

我有一个应用程序使用COM互操作来创build一个电子表格,在客户端的机器上的Excel中打开。 不过,如果我查看任务pipe理器,用户closuresExcel时EXCEL.exe进程并不总是结束。 如果我保存工作簿并以编程方式closuresExcel,则只需使用Marshal.ReleaseComObject()进行清理,但由于我依赖于手动closures程序,所以我不知道该怎么做。 有什么build议么?

Excel自动化 – 如何只说不

我正在开发一个vb.net控制台应用程序,它可以逐个打开许多电子表格,读入一对电池并closures文件。 一些电子表格有Excel在我打开文件时重新计算的公式,我收到一个对话框询问我是否想在closures电子表格时保存对该电子表格的更改。 消息:“是否要将更改保存到myfile.xls?当打开由早期版本的Excel最后保存的文件时,Microsoft Office Excel将重新计算公式” 如何自动拒绝该对话框? Dim newCBD As New CBD Dim xlApp As Excel.Application Dim xlWorkBook As Excel.Workbook Dim xlWorkSheet As Excel.Worksheet xlApp = New Excel.ApplicationClass xlWorkBook = xlApp.Workbooks.Open(myFile) xlWorkSheet = xlWorkBook.Worksheets(1) …do a bunch of junk here xlWorkBook.Close() xlApp.Quit() 谢谢!

添加新工作表到现有文件后C#interop:excel进程不退出

可能重复: 如何正确清理C#中的Excel互操作对象 我已经阅读了许多关于pipe理COM引用的其他线程,同时使用.Net-Excel互操作来确保Excel进程在退出时正确退出,到目前为止技术运行良好,但是最近我遇到了将新工作表添加到现有工作簿文件时出现问题。 下面的代码留下了一个僵尸Excel过程。 如果我将工作表添加到新创build的工作簿文件,它退出罚款。 如果我运行的代码不包括.Add()行,它退出罚款。 (我正在阅读的现有文件是由注释掉的代码创build的空文件) 有任何想法吗? //using Excel = Microsoft.Office.Interop.Excel; //using System.Runtime.InteropServices; public static void AddTest() { string filename = @"C:\addtest.xls"; object m = Type.Missing; Excel.Application excelapp = new Excel.Application(); if (excelapp == null) throw new Exception("Can't start Excel"); Excel.Workbooks wbs = excelapp.Workbooks; //if I create a new file and then add a […]