2015-07-13 92 views
1

获取sheetnames我有下面的代码。我成功地从每片在工作簿中提取数据:从工作簿

foreach (var sheetName in GetExcelSheetNames(connectionString)) 
{ 
    if (sheetName.Contains("_")) 
    { 
    } 
    else 
    { 
     using (OleDbConnection con = new OleDbConnection(connectionString)) 
     { 
      var dataTable = new DataTable(); 
      string query = string.Format("SELECT * FROM [{0}]", sheetName); 
      con.Open(); 
      OleDbDataAdapter adapter = new OleDbDataAdapter(query, con); 
      adapter.Fill(dataTable); 
      ds.Tables.Add(dataTable); 
     } 
    } 
} 

我的目标是在ds提取SHEETNAME。

我试试下面的代码,但它不工作

string query = string.Format("SELECT sheetName, * FROM [{0}]", sheetName); 

我应该如何修改呢?

+0

你的意思是_doesn't work_?你得到任何异常或错误信息?意外的结果? –

+0

如果您的目标是提取图纸名称,那么显然函数GetExcelSheetNames将为您提供这些。你能告诉我们你准确搜索的内容吗? – Schuere

回答

1

这似乎是一个无用的东西对我做什么,但这应该工作:

string.Format("SELECT '{0}' as sheetName, * FROM [{0}]", sheetName); 

它只是在的过去表名称,查询中的第一个字段。

这会假设你已经知道名称,这使得该方法无用。 OLEDB无法在Excel中获取表格名称,因此如果不知道名称,则需要使用另一种方法。


对于具有单引号表名称,使用此:

string.Format("SELECT '{1}' as sheetName, * FROM [{0}]", sheetName, sheetName.Replace("'", "'''")); 
0

如何使用OfficeOpenXml?

using (var pck = new OfficeOpenXml.ExcelPackage(file)) 
{ 
    List<string> sheets = pck.Workbook.Worksheets.Select(x=>x.Name).ToList(); 
    var ws = pck.Workbook.Worksheets[sheet]; 
    DataTable tbl = new DataTable(); 

    foreach (var firstRowCell in ws.Cells[1, 1, 1, ws.Dimension.End.Column]) 
    { 
      tbl.Columns.Add(hasHeader ? firstRowCell.Text : string.Format("Column {0}", firstRowCell.Start.Column)); 
    } 
    var startRow = hasHeader ? 2 : 1; 
    for (var rowNum = startRow; rowNum <= ws.Dimension.End.Row; rowNum++) 
    { 
     var wsRow = ws.Cells[rowNum, 1, rowNum, tbl.Columns.Count]; 
     var row = tbl.NewRow(); 
     foreach (var cell in wsRow) 
     { 
      row[cell.Start.Column - 1] = cell.Text; 
     } 
     tbl.Rows.Add(row); 
    } 
    return tbl; 
}