Чтение из Excel (диапазон в многомерный массив) C # - PullRequest
12 голосов
/ 26 мая 2009

Как бы я прочитал из листа Excel и загрузить отмеченный выбор (Площадь) в многомерный массив? Столбец в Excel сам по себе может быть многомерным массивом, поскольку он будет содержать более одного значения.

Идея (не знаю, насколько это хорошо или плохо) сейчас заключается в том, чтобы выполнить цикл for для всех Excel.Area (выбранные поля) и добавить содержимое этого поля в многомерный массив. Поскольку многомерный массив имеет тип object [,] и поэтому не является универсальным, для него нет удобного метода add (). Все это нужно сделать вручную.

Любая идея, если этот подход в порядке или можно было бы сделать более эффективно?

Ответы [ 2 ]

18 голосов
/ 26 мая 2009

Вы можете прочитать значение 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
}

Этот фрагмент кода из .NET-оболочки для MS Office . Но тот же принцип есть в VSTO или VBA в MS Excel.

2 голосов
/ 26 мая 2009

Вот код C # для этого с SpreadsheetGear :

    // 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

...