【问题标题】:Reading data from excel 2010 using Microsoft.Office.Interop.Excel使用 Microsoft.Office.Interop.Excel 从 excel 2010 读取数据
【发布时间】:2013-04-08 07:18:28
【问题描述】:

我无法在 Excel 中读取数据。这是我正在使用的代码:

using Excel = Microsoft.Office.Interop.Excel;

Excel.Application xlApp = new Excel.Application();
Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"Book1.xlsx", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel._Worksheet xlWorksheet = (Excel._Worksheet)xlWorkbook.Sheets[1];
Excel.Range xlRange = xlWorksheet.UsedRange;

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

for (int i = 1; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        MessageBox.Show(xlWorksheet.Cells[i,j].ToString());
    }
}

我收到一个消息框,上面写着 System.__ComObject 而不是值。
我该如何解决这个问题?

【问题讨论】:

    标签: c# .net excel office-interop


    【解决方案1】:

    我找到了上面的解决方案,代码如下:

    string temp = (string)(xlRange.Cells[i, j] as Excel.Range).Value2;
    MessageBox.Show(temp);
    

    【讨论】:

      【解决方案2】:

      还没有测试过,但我认为应该是这样的

      MessageBox.Show(xlRange.Cells[i,j].ToString());
      

      或者

      MessageBox.Show(xlRange.Cells[i,j].Value.ToString());
      

      【讨论】:

      • 抛出错误“'object'不包含'Value'的定义,并且找不到接受'object'类型的第一个参数的扩展方法'Value'(您是否缺少使用指令还是程序集参考?)”
      【解决方案3】:

      试试这个:

      MessageBox.Show(xlRange.Cells[i][j].Value);
      

      【讨论】:

        【解决方案4】:

        使用以下函数获取数据作为第 N 张工作表的 DATATABLE 对象:

        public DataTable GetWorkSheet(int workSheetID)
            {
                string pathOfExcelFile = fileFullName;
                DataTable dt = new DataTable();
        
                try
                {
                    excel.Application excelApp = new excel.Application();
        
                    excelApp.DisplayAlerts = false; //Don't want Excel to display error messageboxes
        
                    excel.Workbook workbook = excelApp.Workbooks.Open(pathOfExcelFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); //This opens the file
        
                    excel.Worksheet sheet = (excel.Worksheet)workbook.Sheets.get_Item(workSheetID); //Get the first sheet in the file
        
                    int lastRow = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Row;
                    int lastColumn = sheet.Cells.SpecialCells(excel.XlCellType.xlCellTypeLastCell, Type.Missing).Column;
        
                    excel.Range oRange = sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[lastRow, lastColumn]);//("A1",lastColumnIndex + lastRow.ToString());
        
                    oRange.EntireColumn.AutoFit();
        
        
                    for (int i = 0; i < oRange.Columns.Count; i++)
                    {
                        dt.Columns.Add("a" + i.ToString());
                    }
        
                    object[,] cellValues = (object[,])oRange.Value2;
                    object[] values = new object[lastColumn];
        
                    for (int i = 1; i <= lastRow; i++)
                    {
        
                        for (int j = 0; j < dt.Columns.Count; j++)
                        {
                            values[j] = cellValues[i, j + 1];
                        }
                        dt.Rows.Add(values);
                    }
        
                    workbook.Close(false, Type.Missing, Type.Missing);
                    excelApp.Quit();
                }
                catch (Exception ex)
                {
                    System.Windows.Forms.MessageBox.Show(ex.Message, "Error", System.Windows.Forms.MessageBoxButtons.OK, System.Windows.Forms.MessageBoxIcon.Error);
        
                }
                return dt;
        
            }
        

        【讨论】:

          【解决方案5】:

          试试这个代码:

          MessageBox.Show(((Excel.Range)xlRange.Cells[i,j]).Value2.ToString());
          

          这段代码对我来说是成功的。

          【讨论】:

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