【问题标题】:Reading from Excel (Range into multidimensional Array) C#从 Excel 中读取(范围为多维数组)C#
【发布时间】:2010-10-28 23:10:48
【问题描述】:

如何从 Excel 工作表中读取并将标记的选择(区域)加载到多维数组中? Excel 中的一列本身可能是一个多维数组,因为它包含多个值。

现在的想法(不确定这是好是坏)是对所有 Excel.Area(选定字段)进行 for 循环,并将该字段的内容添加到多维数组中。由于多维数组是 object[,] 类型的,因此是非泛型的,因此没有方便的 add() 方法。所有这些都需要手动完成。

知道这种方法是否可行,或者是否可以更有效地完成?

【问题讨论】:

    标签: c# excel multidimensional-array


    【解决方案1】:

    您可以将 Range 的值读取为数组:

    using (MSExcel.Application app = MSExcel.Application.CreateApplication()) 
    {
        MSExcel.Workbook book1 = app.Workbooks.Open( this.txtOpen_FilePath.Text);
        MSExcel.Worksheet sheet = (MSExcel.Worksheet)book1.Worksheets[1];
        MSExcel.Range range = sheet.GetRange("A1", "F13");
    
        object value = range.Value; //the value is boxed two-dimensional array
    }
    

    此代码 sn-p 来自.NET wrapper for MS Office。但是 MS Excel 中的 VSTO 或 VBA 中的原理相同。

    【讨论】:

      【解决方案2】:

      这是使用 SpreadsheetGear 执行此操作的 C# 代码:

          // Load the workbook.
          SpreadsheetGear.IWorkbook workbook = SpreadsheetGear.Factory.GetWorkbook(@"MyWorkbook.xlsx");
          // Get a range of cells as an array of object[,].
          object[,] values = (object[,])workbook.Worksheets["MySheet"].Cells["A1:J10"].Value;
      

      SpreadsheetGear 还提供快速 API 用于一次访问一个单元格,这样您就可以避免将值复制到数组而不牺牲性能。

      免责声明:我拥有 SpreadsheetGear LLC

      【讨论】:

      • 为什么使用 SpreadsheetGear 比使用 Excel 互操作更好?
      • 这取决于您正在构建的应用程序类型以及您正在使用它做什么。与其在此处列出,不如在此页面右侧查看我们客户的 cmets:spreadsheetgear.com/products/spreadsheetgear.net.aspx
      • “还提供快速 API”...是 SpreadsheetGear.Advanced.Cells API 还是我们将此处的值转换为对象 [,] 的事实?我假设您也可以直接转换为 double[,]?
      • @Terry 我同意你的看法,但为了公平起见,TcKs accepted 上面的回答也是使用object
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2020-12-18
      • 1970-01-01
      相关资源
      最近更新 更多