Быстрый способ извлечения простых строк из файлов Excel xlsx

Там, где я работаю, у меня есть несколько сотен файлов xlsx (созданных с помощью Office 2010 Starter), из которых мне нужно извлечь информацию. Это разовая работа, поэтому вопрос в том, какой способ самый быстрый. Существующий инструмент? Запрограммировать решение?

Информация — это просто строки, форматирование не имеет значения. Эти файлы содержат данные о клиентах. Один файл для каждого клиента. И прежде чем вы спросите, да, это глупая система, и мы отказываемся от нее. Поскольку сейчас мы переходим на новую систему, нам нужно экспортировать существующие данные о клиентах в файл CSV, который можно импортировать в новую систему.

Если бы я написал для этого компьютерную программу, мне нужно было бы иметь доступ к первому рабочему листу в каждом файле и иметь возможность читать содержимое любой заданной ячейки (A1, C5 и т. д.). Вот и все.

Поскольку xlsx-файл — это всего лишь несколько заархивированных XML-файлов, одним из подходов может быть написание кода, который распаковывает и анализирует XML-файлы. Это пахнет очень трудоемким решением, поэтому я бы предпочел использовать бесплатную библиотеку, если она существует.

Из языков, которые могли бы здесь пригодиться, лучше всего я разбираюсь в C++ и C, но немного разбирался в C#, VB6 и VB.NET, а также немного в Python.


person Oystein    schedule 01.06.2012    source источник
comment
Поскольку у вас есть опыт работы с VB6, и это одноразовая необходимость, быстрый макрос Excel VBA кажется наиболее очевидным подходом (но, конечно, это может отражать некоторые из моих собственных предубеждений...)   -  person Tim Williams    schedule 01.06.2012
comment
Ойстейн, у тебя получилось?   -  person Jon Crowell    schedule 01.07.2012
comment
@HeadofCatering Извините за задержку, я совершенно забыл об этом вопросе, так как переход на новую систему затянулся. Ваш макрос хорош, так что я буду использовать его, когда произойдет переход. Спасибо ;)   -  person Oystein    schedule 02.07.2012
comment
Не беспокойтесь - мне просто было любопытно узнать, сработало ли это для вас. Удачи с переходом.   -  person Jon Crowell    schedule 04.07.2012


Ответы (3)


Поместите все файлы Excel в одну папку, если это еще не сделано, и выполните следующие действия:

  1. Откройте пустую книгу
  2. Откройте редактор VBA Alt + F11
  3. Добавить модуль: Вставить --> Модуль
  4. Добавьте приведенный ниже код в модуль (измените строку каталога, чтобы она указывала на каталог, в котором находятся ваши конвертируемые файлы Excel)
  5. Просмотрите несколько файлов, чтобы убедиться, что он делает то, что вы ожидаете.
  6. F5 для запуска на всех файлах
  7. Попрощайтесь со своей старой системой

код:

    Option Explicit

    Sub ExportAllToCSV()
        Dim Directory As String
        Dim i As Long
        Dim file As String
        Directory = "C:\workbooks\"
        i = 1

        Application.DisplayAlerts = False
        Application.ScreenUpdating = False

        ' Get the first file
        file = Dir(Directory, vbReadOnly + vbHidden + vbSystem)

        Do While file <> ""
            If Right(file, 4) = "xlsx" Then ' change to right(file ,3) = "xls" if you have xls files instead of xlsx
                Workbooks.Open Filename:=file
                ActiveWorkbook.SaveAs Filename:="C:\workbooks\file" & i & ".csv", FileFormat _
                            :=xlCSV, CreateBackup:=False
                ActiveWorkbook.Close
                i = i + 1
            End If

            ' Get the next file
            file = Dir()
        Loop

        Application.DisplayAlerts = True
        Application.ScreenUpdating = True
    End Sub
person Jon Crowell    schedule 01.06.2012
comment
Попросите макрос переместить интересующую ячейку в левый верхний угол и удалить остаток листа перед сохранением, и эта проблема станет тривиальной. - person Mark Ransom; 02.06.2012

Я бы рекомендовал использовать API взаимодействия с Excel. Пример использования API: здесь.

person linuxuser27    schedule 01.06.2012

Поскольку вы упомянули, что можете использовать C#, существует отличная библиотека для файлов Excel 2007+, EPPlus. Вот несколько примеров для начала:

  ExcelPackage ep = new ExcelPackage(new FileInfo("excelfile.xlsx"));
  // take the first sheet 
  // or you could get the Worksheet with name : ep.Workbook.Worksheets["Sheet1"]
  ExcelWorksheet ws = ep.Workbook.Worksheets[0];

  // now you can get data
  // cell data from row 3, column 2 (first row or column is 1 not 0)
  string data = ws.Cells[3, 2].Value.ToString();
  // from A5 cell
  string data1 = ws.Cells["A5"].Value.ToString();

  // you can find out how many rows are there 
  int maxRow = ws.Dimension.End.Row;
person Antonio Bakula    schedule 01.06.2012