Tag: excel interop

从C#读取Excel数据

我正在尝试使用Office.Interoperability.Excel命名空间从Excel工作表中读取数据。 我想要得到表格的第一行,因为第一行包含标题,没有指定开始和结束单元格。 因为我不知道是否有新的列被添加到工作表。 Microsoft.Office.Interop.Excel.Application excelObj = new Application(); Microsoft.Office.Interop.Excel.Workbook myBook = excelObj.Workbooks.Open(@"D:\myFile.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 0, 0); Microsoft.Office.Interop.Excel.Worksheet mySheet = (Worksheet)myBook.Sheets.get_Item(1); Range range = mySheet.Cells.EntireRow; 这里,范围成为整个范围,并且不限于标题列的数量。 另外我有一个大约10,000行的庞大数据进行处理。

C#Excel Interop:无法从Excel中读取所有数据

我从xlsx文件读取date时遇到了一些问题,我的意思是它不读取单元格中的所有信息,例如我在单元格中有这样的信息: "4876112","3456151712","345627712","3125HPC21017500011","34131HPC210349014112","35134HPC210273008212" 当我检查看DataTable时,我只能在行中看到这些信息 "4876112","3456151712","345627712", 这是我的代码: Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook workbook = excelApp.Workbooks.Open(input, 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); string sheetname = ""; foreach (Microsoft.Office.Interop.Excel.Worksheet sheet in workbook.Sheets) { sheetname = sheet.Name; break; } string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", input); string query = String.Format("select […]

在线程中调用Excel函数时CastError?

我有一个Excel插件类有这个function: public void testRibbon() { Excel.Workbook workbook = this.Application.ActiveWorkbook; Excel.Worksheet activeSheet = workbook.Sheets[1]; Excel.Range range = activeSheet.get_Range(JOB_ID_FIELD + HEADER_ROW, TOTAL_STATUS_PERCENTAGE_KEY_FIELD + (10 + 1).ToString()); range.get_Range("C4").Value = "test Ribbon complete"; } 在function区中,我添加了一个button,当按下它时,会在一个线程中调用testRibbon: private void process_Click(object sender, RibbonControlEventArgs e) { Thread processThread = new Thread(delegate(){ Globals.ExcelAddin.testRibbon(); }); processThread.Start(); } 这会导致一个转换错误: 无法将“System .__ ComObject”types的COM对象转换为接口types“Microsoft.Office.Interop.Excel._Workbook”。 此操作失败,因为IIC“{000208DA-0000-0000-C000-000000000046}”接口的COM组件上的QueryInterface调用失败,原因如下错误:加载types库/ DLL时出错。 (来自HRESULT的exception:0x80029C4A(TYPE_E_CANTLOADLIBRARY))。 如果我不使用新线程,则不会发生转换错误。 […]

Excel Interop未能写入(HRESULT:0x800A03EC)

当我试图在Excel Interop中执行这个命令时,我得到了一个exception0x800A03EC ws.get_Range("A2").Value= "=?9ABC" 似乎interop不喜欢以“=?”开头的string。 我试图通过将计算模式设置为手动来解决问题,但不幸的是,这不是解决scheme。 谁能告诉我该怎么办? 谢谢锦先生

当您使用“格式化单元格”选项更改单元格的格式时,则不激活Excel事件

有人可以告诉我这一点 如果我已经在Excel中select了一个单元格 右键点击它 转到格式单元格选项 更改格式 那么哪个事件会被解雇? 请注意,通过这个操作,我不会离开原单元格。

使用可用版本的Excel进行C#应用程序开发

有没有一个优雅/直接的方式来使用C#应用程序中的Microsoft Excel,而不被束缚到特定版本的Microsoft Excel? 背景… 我在过去使用VBScript编写脚本,使用Microsoft Excel(如果安装)来自动生成Excel电子表格的过程。 set xl = createObject("Excel.Application") 无论在我的体验/场景中安装了哪个excel版本(我的开发计算机上安装了Excel 365,我的脚本运行在运行Excel 2010的独立副本的Microsoft Windows 2008 R2服务器上) 我希望逐步做一些事情,并开始开发C#应用程序(winforms或控制台)来完成相同的工作。 我开发了一个testing应用程序,可以使用我的开发机器上安装的Excel版本。 我需要应用程序才能运行在运行Excel 2010的Windows Server 2008 R2服务器上。 Project->Add Reference COM "Microsoft Excel 16.0 Object Library" 然后添加使用语句… using Excel = Microsoft.Office.Interop.Excel; 然后一些基本的winformstesting代码… public Form1() { InitializeComponent(); SimpleExcelTest(); } void SimpleExcelTest() { Excel.Application xl = new Excel.Application(); Excel.Workbook wb = xl.Workbooks.Add(); […]

数据不能写入Excel文件

我写了代码来读取excel文件。 当我添加联系人值,然后我需要这些值被写入Excel文件,但问题是,这些值不能被写入Excel文件中的单元格。 空白!!!! 为什么? 我的代码有什么问题? static void Main(string[] args) { var contacts = new List<Contact>(); contacts.Add(new Contact{Firstname = "name 1", Lastname = "lastname 1", Email = "email 1", PhoneNumber = "phone 1"}); contacts.Add(new Contact { Firstname = "name 2", Lastname = "lastname 2", Email = "email 2", PhoneNumber = "phone 2" }); Application app = […]

Excel应用程序不在Interop中退出

我正在使用下面的一段代码在ASP.net表单上dynamic地写入excel文件,可以将数据表保存为excel。 //Create Excel Object Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook workbook = excel.Workbooks.Open(target); Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; worksheet.Name = "Worksheet1"; excel.Visible = false; //Generate Fields Name foreach (DataColumn col in dataTable.Columns) { colIndex++; excel.Cells[1, colIndex] = col.ColumnName; } object[,] objData = new object[rowNo, columnNo]; for (int row = 0; row < rowNo; row++) { for […]

C# – 互操作excel

我想填写窗体的数据,以优秀。 代码的结尾,我给了validation,所以如果文件名存在于特定的位置,它不会再保存它 string savingNewForm = "C:\\temp\\" + temp; if (File.Exists(savingNewForm)) { MessageBox.Show("File already exist!"); oBook.Close(); oApp.Quit(); } else { oBook.SaveAs(savingNewForm); oBook.Close(); oApp.Quit(); MessageBox.Show("Your file saved"); } 但是当用户保存相同的文件名时会出错。 我认为主要的问题是, if (File.Exists(savingNewForm))导致它不检查文件名是否存在,而是去else并给出一个popupExcel问,如果我想要replace或不。

在范围中查找列

是否有可能知道在给定列的范围内存在哪些列,例如“A:C”存在列A,B和C,例如“G:K”存在列G,H,I,J和K以及“ Z:AC“有Z,AA,AB和AC 我正在使用C#和COM iterop