我正在开发一个基于Web的应用程序,需要从excel 97-2003(.xls)电子表格中提取数据,该电子表格在单个工作表上有多个小表。
我目前正在尝试使用以下代码打开并阅读工作表:
string properties = String.Format(@"Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\Users\Macy\Desktop\lbr_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];
根据How to read single Excel cell value,但是由于没有提及.net,我被认为可能不是基于Web的用途,或者我在某处缺少了using子句。
我见过的大多数其他解决方案通常表明使用了第三方项目。
我错过了一些愚蠢的事情吗?或者只是没看对地方?
答案 0 :(得分:1)
使用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
,则第一行将被视为列标题。)