用c#读取数据透视表

时间:2012-10-02 10:40:34

标签: c# excel jet

我正在尝试阅读包含由宏生成的数据透视表的excel表,其中包含以下连接字符串:

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

问题是这些值不会出现在我的数据集中,只出现在列和行的标签上,而不是必需的值。

有没有想过阅读这样的文件?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

填充数据集较慢,但我得到了我正在寻找的东西 感谢

答案 2 :(得分:0)

这将读取和excel表到C#中的数据表。 '片材'是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);
          }

答案 3 :(得分: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();
    }