0

我正在尝试读取包含由具有以下连接字符串的宏生成的数据透视表的 excel 表:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=path;
Extended Properties="Excel 8.0;HDR=NO;";

问题是这些值没有出现在我的数据集中,只有列和行的标签,但没有必要的值。

任何想法阅读这样的文件?

4

4 回答 4

1

我不知道答案,但也许 Epplus ( http://epplus.codeplex.com/ ) 可以帮助你。

于 2012-10-02T12:05:04.243 回答
1

我不知道为什么,但是通过将提供者更改为Provider=Microsoft.ACE.OLEDB.12.0,可以正确读取数据。

填充数据集较慢,但我得到了我想要的东西谢谢

于 2012-10-02T15:38:59.977 回答
0

这将在 C# 中读取表格并将其转换为数据表。'sHeet' 是 Excel 中工作表的名称,而 startfromrow 是您希望读取表格的起始位置。excelTable 是将存储数据的数据表。

public void ReadEx(string sHeet, int startfromrow)
       {
          excelTable.Clear();
          string excelFile =  "filepath";
          Excel.Application excel = new Excel.Application();
          Excel.Workbook wb = excel.Workbooks.Open(excelFile);
          Excel.Worksheet pivotWorkSheet = (Excel.Worksheet)wb.Sheets[sHeet];
          Excel.Range xlRange = pivotWorkSheet.UsedRange;

          int rowCount = xlRange.Rows.Count;
          int colCount = xlRange.Columns.Count;


          if (excelTable.Columns.Count <= 0)
            {
              excelTable.Columns.Add("Row Labels");
              foreach (string column in lColumns)
              {
                  excelTable.Columns.Add(column);
              }
            }

          object[] exrow = new object[colCount];
          for (int i; startfromrow <= rowCount; row++)
          {
              for (int j = 1; j <= colCount; j++)
              {
                  exrow[j-1] = xlRange.Cells[startfromrow , j].Text;
                  Console.WriteLine(xlRange.Cells[startfromrow , j].Text);
              }
              excelTable.Rows.Add(exrow);
          }
于 2014-06-05T08:40:05.987 回答
0

我对user3644719的回答做了一些修改。在他/她的回答中,有一些错字,例如代码中未定义的变量。

        String sHeet = "Pivot";

        DataTable excelTable = new DataTable();

        excelTable.Clear();
        string excelFile = "C:\\test_pivot.xlsx";
        Excel.Application excel = new Excel.Application();
        Excel.Workbook wb = excel.Workbooks.Open(excelFile);
        Excel.Worksheet pivotWorkSheet = (Excel.Worksheet)wb.Sheets[sHeet];
        Excel.Range xlRange = pivotWorkSheet.UsedRange;

        int rowCount = xlRange.Rows.Count;
        int colCount = xlRange.Columns.Count;

        string[] lColumns = new string[2] { "Column1","Column2" };

        if (excelTable.Columns.Count <= 0)
        {
            foreach (string column in lColumns)
            {
                excelTable.Columns.Add(column);
            }

        }

        Object[] exrow = new object[colCount];
        for (int row=1; row <= rowCount; row++)
        {
            for (int j = 1; j <= colCount; j++)
            {  
                exrow[j - 1] = xlRange.Cells[row, j].Text;
                Console.WriteLine(xlRange.Cells[row, j].Text);
            }

            excelTable.Rows.Add(exrow);
            //excelTable.Rows.Add(exrow);
        }

        String str = excelTable.ToString();
    }
于 2017-03-23T06:24:48.367 回答