使用C#从Excel表格中读取数据

4

如何使用C#代码读取Excel表格中的信息......


这是一个完全重复的问题。有人请添加重复链接并关闭。 - Anonymous Type
可能是重复的问题:从C#读取Excel文件 - Doc Brown
6个回答

4

您可以使用Oledb。

    using System.Data;
    using System.Data.OleDb;

OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Book1.xls;Extended Properties=Excel 8.0");
OleDbDataAdapter da = new OleDbDataAdapter("select * from MyObject", con);
DataTable dt = new DataTable();
da.Fill(dt);

或者您可以使用Office Interop

this.openFileDialog1.FileName = "*.xls";
  if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
   {
      Excel.Workbook theWorkbook = ExcelObj.Workbooks.Open(
         openFileDialog1.FileName, 0, true, 5,
          "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false,
          0, true); 
     Excel.Sheets sheets = theWorkbook.Worksheets;
     Excel.Worksheet worksheet = (Excel.Worksheet)sheets.get_Item(1);
     for (int i = 1; i <= 10; i++)
     {
     Excel.Range range = worksheet.get_Range("A"+i.ToString(), "J" + i.ToString());
     System.Array myvalues = (System.Array)range.Cells.Value;
     string[] strArray = ConvertToStringArray(myvalues);
     }
}

1
使用OleDb时,请确保您了解此处描述的可能问题:http://blog.lab49.com/archives/196 还要注意,您的应用程序只能针对32位进行目标设置(Jet没有64位版本)http://social.msdn.microsoft.com/Forums/en-US/adodotnetdataproviders/thread/45aa44dd-0e6f-42e5-a9d6-9be5c5c8fcd1 http://www.telerik.com/support/kb/aspnet-ajax/general/error-on-64-bit-windows-machines-the-microsoft-jet-oledb-4-0-provider-is-not-registered-on-the-local-machine.aspx - Piotr Owsiak
什么?最后一行是错误的!使用Object[,] oArray = (Object[,])range.Value2,完全摆脱for循环。你绝对不想使用com interop迭代.Cells。如果你想要写回Excel,应该迭代对象数组并将其传回修改后的状态。 - Anonymous Type

0

Excel有一个编程API。您可以使用它来使用C#获取数据范围。您可以使用类似以下的代码:

    Excel.Application oXL;
    Excel._Workbook oWB;
    Excel._Worksheet oSheet;
    oSheet.get_Range(RangeStart,RangeEnd)

0

NPOI 是一个不错的选择。

使用 Office 互操作性需要在应用程序运行的计算机上安装 Office(并且是正确的版本)。如果是 Web 应用程序,那么可能不行,并且它也不足以在生产环境中使用。OLEDB 有严重的限制,除非数据真的很简单,否则我不会使用它。


或者你可以使用带有或不带有linq的XML库。但对于简单的任务,NPOI也是可以的。 - Anonymous Type
我不确定你所说的“NPOI适用于简单任务”的意思。除了Office.Interop之外,这是几乎完全访问电子表格功能的唯一方法,并且对于生产应用程序而言比Office.Interop更为强大。您无法使用XML访问本机格式XLS电子表格,并且仅具有创建新电子表格的基本功能,它实际上并不是解决问题的通用解决方案。 - Jamie Treworgy
或许你在谈论XLSX格式。当我想到“读取Excel电子表格”时,我想到的是仍然广泛使用的XLS格式。它与基于XML的XLSX格式完全不同,而且这两个问题非常不同,因为XLS不是文本/XML格式。 - Jamie Treworgy

0
  1. Excel COM Interop - 通过 Microsoft.Office.Interop.Excel + Microsoft.Office.Interop.Excel.Extensions
  2. ADO.Net 通过 OLEDB 数据提供程序来访问 Excel。
  3. 使用 System.XML 和/或 Linq to XML 和/或 Open XML SDK(也可用于从头编程创建新工作簿)。
  4. 第三方库,如 NPOI。
  5. 第三方供应商软件包,如 spreadsheetgear。


0

有关OleDb的一些重要信息,请参阅我在Vinay B R答案下的评论。 - Piotr Owsiak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接