Как создать лист Excel через VB6 без объекта Excel? - PullRequest
3 голосов
/ 12 марта 2009

Недавно мне было поручено обновить приложение для сбора данных VB6, чтобы добавить возможность генерировать отчеты Excel и распечатывать их через приложение (оба должны быть выполнены на одном компьютере). Обычно это не проблема, я сгенерировал отчеты Excel с VB6 перед использованием объекта Excel.

Итак, я продолжил, кодировал изменения и представил их, а затем мне сказали, что на машине, на которой будет установлена ​​эта программа, не будет полной копии Excel, и я должен придумать другую решение.

Я пытался создать файлы с разделителями (разделенные запятыми или текст), но когда эти файлы открываются в Excel, они плохо форматируются, т. Е. Если одна ячейка имеет 20 символов, половина символов будет обрезана из-за фиксированного размера ячейки.

У меня есть еще пара идей:

1) Я знаю, что у openoffice есть API. Можно ли использовать этот API для создания правильно отформатированного файла Excel? Есть ли COM-объект, который я могу использовать?

2) Я нашел этот инструмент: http://www.carlosag.net/Tools/ExcelXmlWriter/ Тем не менее, это было написано в VB.NET. Могу ли я использовать этот инструмент в VB6?

Я действительно в замешательстве и не знаю, в каком направлении идти дальше. У кого-нибудь есть какие-либо идеи относительно вышеуказанных вопросов? Кроме того, я также открыт для любых других предложений / лучших методов. Все, что поможет мне выполнить эту задачу, будет оценено!

ПРИМЕЧАНИЕ. Версия Excel, которая будет использоваться для просмотра этих отчетов, - Excel 2007

Ответы [ 10 ]

4 голосов
/ 12 марта 2009

Давайте посмотрим на эти два требования:

добавить возможность генерировать отчеты Excel и распечатать их через приложение.

и

машина, на которой будет установлена ​​эта программа [sic], не будет иметь полной копии Excel

Если я не пойму вас неправильно, они кажутся взаимоисключающими. Если вы имеете в виду, что вы будете просто генерировать отчеты на одном компьютере, а они будут просматриваться и распечатываться в другом месте, вы можете попробовать SpreadSheetML .

Будьте осторожны при поиске дополнительной информации о SpreadSheetML: существует много дезинформации, которая путает SpreadSheetML с новым форматом Xml, используемым для Excel в Office 2007. SpreadSheetML работает еще в OfficeXP, и даже в ограниченном смысле в Office 2000.

1 голос
/ 12 марта 2009

Создайте файл CSV, как обычно.

Позвольте вашему настольному приложению выполнить форматирование на компьютере, на котором доступны файлы XLS, до его печати. ​​

1 голос
/ 12 марта 2009

Вы можете сохранить файлы Excel в виде HTML. В веб-приложении, которое я написал для экспорта данных в формате Excel, я просто создал html-файл, например, один экспорт в Excel. Тогда я служил ему как application / vnd.ms-excel. Excel открывает это просто отлично. Возможно, вы могли бы сделать что-то подобное.

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

0 голосов
/ 09 февраля 2012

Я бы тоже пошел с опцией CSV. Не требует DLL или другой тип объекта. Одно предостережение - быть ОЧЕНЬ осторожным с форматированием, используемым вашими числами, потому что значение 1024,00 создаст два столбца и объединит всю книгу. это будет отформатировано как что-то вроде Format (Numberfield, "#########. # 0")

0 голосов
/ 17 сентября 2010

Я использую NPOI Он не использует библиотеку Excel и выдает выходные данные в формате Excel 2003

0 голосов
/ 26 марта 2009

Создание файла SpreadsheetML из VB6 должно быть очень простым. Это просто текстовый файл, содержащий определенный вариант XML. Я верю, что вы можете получить все документы для SpreadsheetML и WordML от MSDN.

В настоящее время я создаю около 60 различных пользовательских отчетов из приложения vb.net с использованием SpreadsheetML. Существует по крайней мере одна потенциальная проблема из-за изменений в расширениях файлов и безопасности документов, реализованных в Excel 2007. Если вы создадите файл Excel на основе SpreadsheetML и используете расширение .xls, он прекрасно откроется в 2003 году. диалоговое окно, информирующее вас о том, что расширение файла не соответствует содержимому файла. Он откроет и отобразит файл правильно после появления предупреждения. Если вы измените расширение в документе SpreadsheetML на .xml, Excel 2007 откроет его без жалоб. Однако таблицы на основе xml могут открываться в IE на машинах под управлением Excel 2003.

0 голосов
/ 16 марта 2009

Я нашел решение:

Я нашел библиотеку DLL, которую можно использовать для создания и печати таблиц Excel. Я думаю, что это то же самое, что писатель XML, но для VB6.

0 голосов
/ 13 марта 2009

Проверьте это: http://support.microsoft.com/default.aspx?scid=kb;en-us;Q271572

Сделайте то же самое и сохраните файл с расширением .xls.

В качестве альтернативы, вы можете создать контент в формате HTML Table и записать его в файл с расширением xls.

0 голосов
/ 13 марта 2009

Можно создать книгу Excel на компьютере без установленного Excel **, используя соединение Jet - любое соединение Jet - для выполнения SQL-запроса DML «make table» или CREATE TABLE DLL DLL, где находится таблица речь идет о Excel, например рассмотрите этот код VBA:

Dim cat
Set cat = CreateObject("ADOX.Catalog")
With cat  

  ' Create a new Jet .mdb
  .Create _
      "Provider=Microsoft.Jet.OLEDB.4.0;" & _
      "Data Source=" & _
      Environ$("temp") & "\DropMe.mdb"
  ' Use .mdb's Jet connection to create an Excel table
  ' (will create a new workbook to contain it)
  .ActiveConnection.Execute _
     "CREATE TABLE" & _
     " [Excel 8.0;HDR=NO;Database=C:\db.xls;].[Sheet1]" & _
     " (col FLOAT);"
End With

Jet является устаревшим компонентом Windows, который постоянно присутствует на компьютерах с операционной системой Windows, предшествующей Vista, и его можно бесплатно загрузить с MS через MDAC.

При этом для печати их через приложение [Excel] вам явно необходимо приложение Excel!

** Я думаю, что это возможно: я не могу найти машину без Excel, на которой можно тестировать!

0 голосов
/ 12 марта 2009

Если вы согласны с установкой среды выполнения .NET, вы можете обернуть библиотеку в варианте №2 классом .NET, доступным для COM. Класс просто передает вызовы ExcelXMLwriter.

Альтернатива - изучить стандарт XML и написать свой собственный писатель, но это, вероятно, излишне для проекта.

Что касается OpenOffice, посмотрите здесь . Особенно раздел VBA этой страницы здесь . Кажется, есть компонент COM, который вы можете использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...