【问题标题】:excel select all table/worksheet nameexcel选择所有表/工作表名称
【发布时间】:2018-08-15 11:08:43
【问题描述】:

我正在使用 SQL 以 HERE 查询 Excel 文件,并且我知道我可以通过以下方式获取工作表的内容:

var ds = new DataSet();
var conn = new OleDbConnection();
conn.Open();
var cmd = new OleDbDataAdapter("Select * FROM [Sheet1$]", conn);
cmd.Fill(ds, "ds1");

我想问有没有办法得到所有的表名?

我试过this answer,但没有用。

【问题讨论】:

    标签: c# excel


    【解决方案1】:

    您是要从所有工作表中获取数据吗? 如果是,那么请看下面的帖子:

    How to import all the Excel sheets to DataSet in C#

    【讨论】:

      【解决方案2】:

      我尝试了示例链接中的代码,它对我有用:

                  var result = reader.AsDataSet(new ExcelDataSetConfiguration()
                  {
                      UseColumnDataType = true,
                      ConfigureDataTable = (data) => new ExcelDataTableConfiguration()
                      {
                          UseHeaderRow = true
                      }
                  });
      
                  DataTableCollection tables = result.Tables;
      
                  for (int i = 0; i < tables.Count; i++)
                  {
                      Console.WriteLine(tables[i].TableName);
                      //here I can work with current table
                      for (int j = 0; j < tables[i].Columns.Count; j++)
                      {
                          Console.WriteLine(tables[i].Columns[j].ColumnName);
                      }
                  }
      

      【讨论】:

        【解决方案3】:

        我只是想办法通过以下方式获取所有工作表名称:

        var ds = new DataSet();
        var conn = _connNoHeader = new OleDbConnection(string.Format("Provider={0};Extended Properties=\"Excel 8.0;IMEX=1;HDR=No;\";Data Source={1}", provider, filePath));           
        conn.Open();
        
        DataTable tables = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, 
                                                     new object[] { null, null, null, "TABLE" });
        
        Console.WriteLine("The tables are:");
        foreach (DataRow row in tables.Rows)
            Console.Write("  {0}", row[2]);
        
        // here are all worksheet name
        var allWorksheetNames = tables.Rows.OfType<DataRow>().Select(row => row[2].ToString().TrimEnd('$')).ToList();
        

        此解决方案来自HERE

        其他答案也有帮助!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多