2016-02-02 1 views
1

Я не буду оскорблять настоящих программистов здесь, называя себя программистом; В лучшем случае я любитель. Теперь перед проблемой:visual basic 2010 windows form application читать значения файла excel в массиве

Я пишу программу, которая позволит пользователям в аварийном оперативном центре быстро входить в систему и обрабатывать радиопередачу и другие данные. Это программное обеспечение не будет обрабатывать конфиденциальную информацию, поэтому конфиденциальность данных не вызывает беспокойства. Однако целостность и надежность. Будет несколько экземпляров, где эта программа должна читать из некоторого источника данных, который может быть отредактирован вне программы, и файл просто скопируется на место при создании обновлений (я обработаю эту часть). Мы выбрали Excel, поскольку он выложен в таблице изначально, а файлы xlsx легко поддерживаются программным обеспечением практически на каждой платформе.

Что я хочу сделать, так это: Когда откроется основная форма, я хочу, чтобы она вызывала публичный элемент в Module1 (так как другим формам может понадобиться использовать этот суб), а также открыть файл Facilities.xlsx как только для чтения. Есть два столбца: A содержит тип объекта (больница, EOC, полевое командование), а B содержит название объекта (Мемориал Гринвилл, EOC округа Спартанбург) и т. Д. Количество строк будет изменяться по мере добавления и удаления объектов, однако я буду обрабатывать распространение обновлений. Другой файл excel, Personnel.xlsx, будет содержать больше столбцов и снова неизвестное количество строк.

Что мне нужно сделать: A) Определите размер заполняемого массива, включая количество необходимых размеров, так как это изменится с количеством столбцов и строк и B) прочитает данные в массиве для дальнейшая обработка структурами решений или возможная запись в другой файл excel для других целей. Со всеми намерениями и целями массив должен быть As String, поскольку все значения, с которыми я буду иметь дело, будут строками.

Я нашел десятки примеров, многие из которых работают с фиксированным диапазоном (A1: B38) и аналогичным, и другие, которые используют ADO или даже тот, который каким-то образом приносит SQL в этот микс, и другие, которые настолько неполны I даже не могут определить, как они вписываются в другие примеры. Этот код должен быть небольшим, простым и легким, и ему просто нужно прочитать данные из файла в массив. Все данные будут строками, поэтому нет никаких причудливых вычислений или других проблем.

Как прямо сейчас у меня есть библиотека +12,0 объектов Microsoft Excel и 12.0 библиотеку объектов Microsoft Office (я предполагаю, что Управление увязался с Excel) COM ссылки, и в Module1 у меня есть:

Imports Excel = Microsoft.Office.Interop.Excel 

чтобы облегчить ссылки на пространство имен.

На сегодняшний день я пробовал более десятка различных примеров и имел некоторые сбои во время выполнения, некоторые сбои в чтении любых данных, а некоторые - ошибки, которые не позволяли строить. Я в недоумении и приближаюсь к отказу от Excel в других источниках, которые менее надежны. Мне действительно нужна помощь с этим. Если есть кодовый индикатор, ресурсосберегающее решение, пожалуйста, помогите мне.

ответ

0

Если вы работаете с файлом xslx, не используйте Microsoft.Office.Interop, вам это не нужно. Посмотрите OpenXml библиотеки (https://msdn.microsoft.com/en-us/library/office/bb448854.aspx), или вы можете попробовать с koogra (http://sourceforge.net/projects/koogra/)

Если вы хотите использовать Interop этот код может помочь вам:

 Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application(); 
     Workbook wb = excelApp.Workbooks.Open(@"c:\temp_10\sample1.xlsx"); 
     Worksheet ws = wb.Worksheets[1]; 
     Range excelRange = ws.UsedRange; 

     List<string> rows = new List<string>(); 

     for (int i=1;i<=excelRange.Rows.Count;i++) 
     { 
      string r = ""; 
      for (int k=1;k<=excelRange.Columns.Count; k++) 
      { 
       r += (excelRange.Cells[i, k] as Microsoft.Office.Interop.Excel.Range).Value.ToString(); 
       r += ";"; 
      } 
      rows.Add(r); 
     } 
+0

Спасибо за другим углом смотреть на это. Две вещи, которые мне нужно учитывать: Являются ли библиотеки OpenXML легче на ресурсах, и они легче в коде? Я потянул ссылки, которые вы предоставили, и я буду комментировать мой текущий код и попробовать некоторые из этих примеров.Я все еще имею и, вероятно, по-прежнему буду нуждаться в помощи, имея дело с массивами. Во-первых, получение данных в массивах строк, во-вторых, возможность использования одного измерения в качестве условия для извлечения строк во втором измерении в двух столбцах, переменных строк (около 40) двухмерного массива. –

+0

Я искал это решение, но я не думаю, что это сработает для меня. MSDN говорит, что библиотеки openxml - 2013 или более поздние, и я не так уж далеко. Я использую визуальную студию 2010 и офис 2007, поэтому не стоит набирать обороты. Могу ли я получить этот sdk отдельно или мне нужно вернуться в Interop? –

+0

Я использовал OpenXml 2.5 с Visual Studio 2010. Формат файла xslx такой же для офиса 2007/2010/2013. Я думаю, что вы можете использовать его – bdn02