通过C#从Excel 97-2003电子表格中提取单个单元格或单元格区域.NET



我正在开发一个基于web的应用程序,该应用程序需要从excel 97-2003(.xls(电子表格中提取数据,该电子表格在一个工作表上有几个小表格。

我目前正在尝试以下代码来打开和阅读工作表:

string properties = String.Format(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:UsersMacyDesktoplbr_ems.xls; Extended Properties = 'Excel 8.0;'");
using (OleDbConnection conn = new OleDbConnection(properties))
{
string worksheet = "LbrRpt";
conn.Open();
DataSet ds = new DataSet();
//string columns = String.Join(",", columnNames.ToArray());
using (OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [" + worksheet + "$]", properties))
{
DataTable dt = new DataTable();
da.Fill(dt);
ds.Tables.Add(dt);
grdComponent.DataSource = dt;
grdComponent.DataBind();
}

问题是它拉过了整个工作表,所有的数值都是空白的。我认为这不是我试图构建的应用程序所需的代码。

我一直在看这个代码:

Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(workbookPath, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
Excel.Sheets excelSheets = excelWorkbook.Worksheets;
string currentSheet = "Sheet1";
Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
var cell = (Excel.Range)excelWorksheet.Cells[10, 2];

根据如何读取单个Excel单元格值,然而,由于没有提到.net,我相信它可能不适合基于web的使用,或者我在某个地方缺少using子句。

我看到的大多数其他解决方案通常都表示使用第三方项目。

我是错过了一些愚蠢而简单的事情,还是只是找不到正确的地方?

使用SQL从Excel读取数据时,您并不严格限制使用工作表作为FROM子句的主题:

SELECT *
FROM [Sheet1$]

您几乎可以使用Excel支持的任何寻址方案。例如,您可以参考一系列单元格:

SELECT *
FROM [Sheet1$A1:C172]

你可以将范围的开始和结束设置为同一个单元格,以返回单个单元格:

SELECT *
FROM [Sheet1$A1:A1]

您还可以参考一系列列:

SELECT *
FROM [Sheet1$A:B]

或一系列行:

SELECT *
FROM [Sheet1$1:5]

或指定范围:

SELECT *
FROM NamedRange

(注意,如果连接字符串中有HDR=Yes,则第一行将被视为列标题。(

最新更新