2014-09-11 3 views
2

Я читаю данные из файла excel, используя Interop lib. Я могу подключиться к Excel и прочитать данные из него.Как преобразовать объект [,] в datatable в C#

Я получаю возвращаемый тип как объект [,]. Я не уверен, что именно он указывает. Я знаю объект [], который представляет собой массив объектов.

Не уверен object[,]. Я попробовал поиск по Google, но не нашел полезных объяснений.

Кроме того, я хотел бы преобразовать это в datatable и привязать его к виду сетки данных в winforms.

Нужно ли преобразовать выше массив в datatable перед привязкой или есть ли другой способ привязать его к сетке?

Прошу дать мне несколько советов, чтобы получить головы.

Вы найдете ниже код:

void ReadSheetData(string strFilePath) 
     { 

      Workbook workBook = _excelApp.Workbooks.Open(strFilePath, 
      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); 

      int numSheets = workBook.Sheets.Count; 

      for (int sheetNum = 1; sheetNum < numSheets + 1; sheetNum++) 
      { 

       Worksheet sheet = (Worksheet)workBook.Sheets[sheetNum]; 
       Range excelRange = sheet.UsedRange; 
       object[,] valueArray = (object[,])excelRange.get_Value(XlRangeValueDataType.xlRangeValueDefault); 
       PrepareData(valueArray); 
      } 
     } 

System.Data.DataTable PrepareData(object[,] valueArray) 
    { 
     System.Data.DataTable dtTemp = new System.Data.DataTable(); 
     dtTemp=????? // How to convert object[,] to datatable 
     return dtTemp; 
    } 
+0

Использование EPPLUS библиотека является бесплатной, может чтение/запись файлов XLSX, являются магнитудами быстрее, чем Interop, более стабильной и преобразование в DataTable является простой командой ToDataTable(). –

+0

Да .. вы правы .. мы не хотели бы иметь никаких внешних зависимостей. Это причина не использовать соединение oledb также –

+0

Для моего личного опыта часто используется чтение EXCLE и импорт данных. Что вы хотите сделать, желательно решить его, создав тип класса, который представляет запись вашего Excel, загружает массив ваших данных. Когда у вас есть массив данных, вы можете делать то, что хотите. Если вы хотите, я положу вас в решение, так как я делаю – daniele3004

ответ

1

Вы можете перечислить строки и столбцы, используя первый индекс и второй индекс длины массива.

var rowCount = valueArray.GetLength(0); 
var columnCount = valueArray.GetLength(1); 

var dtTemp = new DataTable(); 
foreach(var c in Enumerable.Range(1, columnCount)) 
    dtTemp.Columns.Add(); 
foreach (var r in Enumerable.Range(1, rowCount)) 
    dtTemp.Rows.Add(Enumerable.Range(1, columnCount) 
     .Select(c => valueArray[r - 1, c - 1]).ToArray()); 
+0

@ Chandra..it показывает ошибку при каждом() –

+0

Ошибка 'System.Collections.Generic.IEnumerable ' не содержит определение «Выбрать» и лучший метод перегрузки расширения. System.Linq.Enumerable.Select (System.Collections.Generic.IEnumerable , System.Func ) 'содержит некоторые недопустимые аргументы –

+0

@SaiAvinash, я просто понял, что использую метод расширения «Каждый», я просто изменил его на использование foreach, теперь он должен работать –

Смежные вопросы