3

我正在阅读带有以下代码的excel表:

  Excel.Range uRange = xlWorkSheet.UsedRange;  
  dynamic data = uRange.Value2;

如您所见,我将使用的范围单元格值复制到动态二维数组中。选定范围的一列是自定义格式的,使用上述技术,在访问此自定义格式的单元格(数据 [x,y])时,我得到的只是一堆数字,而不是漂亮的格式值。

如果我只使用以下代码直接访问某个单元格:

 (Excel.Range)xlWorkSheet.Cells[x, y].Text

...我可以看到我需要的格式化值。通过单独访问每个单元格,我会浪费很多时间,因为在循环中逐个单元格访问它会更慢。

是否可以从选定范围内获取所有文本值。像这样的东西:

 Excel.Range uRange =xlWorkSheet.UsedRange; 
 dynamic data = uRange.Text;

当我使用上面的代码时,我得到了空变量。

4

4 回答 4

2

请注意,如果您在 Silverlight 应用程序中使用 COM 互操作来访问 excel 文件,则该方法将不起作用。

这是解决方案,基本上您需要遍历列,并为每列获取一维数组。(这种方法非常快)

 foreach (var column in fullRange.Columns)
 {
   // vals will be a one-dimensional array 
   // of all values in that column!
   var vals = column.Value;

   foreach (var val in vals)
   {
       if (val == null) continue;
       string cellValue = val.ToString();
       //Debug.WriteLine(" Value read: " + cellValue);
       //do something with the value...

   }
 }
于 2012-02-28T03:33:14.590 回答
1

这是我如何让它工作的(将我的格式化为日期):

currentWorksheet.Range["A2", "A10"].NumberFormat = "m/d/yyyy";
dynamic vals = currentWorksheet.Range["A2", "A10"].Value;
于 2011-09-14T13:46:22.337 回答
0

利用Object obj = uRange.Value2

于 2011-08-05T10:40:21.180 回答
0

我有要求:在数据表中导入 excel 记录。所以我尝试使用 oledbConnection,但 Excel.exe 没有从任务管理器中删除。所以我尝试了下面的方法,它工作正常。

public void ImportData(string _FileName, int _SheetIndex)
    {
        Excel.Application xlApp = new Excel.Application();
        Excel.Workbook xlWorkbook = null;
        Excel.Worksheet xlWorksheet = null;
        Excel.Range xlRange = null;

        try
        {
            Logger.Write(String.Format("Import Started for File {0}",_FileName));

            xlWorkbook = xlApp.Workbooks.Open(_FileName);
            xlWorksheet = xlWorkbook.Sheets[_SheetIndex];
            xlRange = xlWorksheet.UsedRange;

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

            object[,] objectArray = (object[,])xlRange.Value[Excel.XlRangeValueDataType.xlRangeValueDefault];



        }
        catch (Exception ex)
        {
            throw ex;
        }
        finally
        {
            if (xlRange != null)
            {
                Marshal.ReleaseComObject(xlRange);
            }

            if (xlWorksheet != null)
            {
                Marshal.ReleaseComObject(xlWorksheet);
            }

            if (xlWorkbook != null)
            {
                xlWorkbook.Close(Excel.XlSaveAction.xlDoNotSaveChanges);
                Marshal.ReleaseComObject(xlWorkbook);
            }

            xlApp.Quit();
            Marshal.ReleaseComObject(xlApp);
            Logger.Write(String.Format("Import End for File {0}", _FileName));
        }
    }
于 2018-07-27T12:49:49.280 回答