LINUX.ORG.RU

Чем читать файлы старого Excel

 , ,


0

3

Добрый день, ЛОР.

Ищу библиотеку на C++ либо C, позволяющую читать и писать файлы формата *xls (не *.xlsx). Решение должно быть кроссплатформенным, т.е. всякие ActiveX идут лесом на винфак.

Перебрал несколько библиотек, почти все отсеялись, т.к. работали только с *.xlsx. Пока остаётся только ExcelFormat 10-летней давности. Сейчас с ней вожусь: читает простейшие файлы, на навороченных с десятком страниц и перекрёстными ссылками падает.

Есть что-то более живое, или придётся это отлаживать?

★★★★★

Есть что-то более живое
читать

The Microsoft Filter Pack is a single point-of-distribution for Office IFilters. IFilters are components that allow search services to index content of specific file types, letting you search for content in those files. They are intended for use with Microsoft Search Services (Sharepoint, SQL, Exchange, Windows Search).

Install this product if you want to search for content in the file types listed below.

The Filter Pack includes:

Legacy Office Filter (97-2003; .doc, .ppt, .xls) Metro Office Filter (2007; .docx, .pptx, .xlsx)

и писать

https://www.microsoft.com/ru-ru/microsoft-365/get-started-with-office-2019

LamerOk ★★★★★
()

https://github.com/troldal/OpenXLSX и там сразу список других проектов

libxls The libxls library (https://sourceforge.net/projects/libxls/) is a C library for reading files in the legacy Excel file format, .xls. It cannot be used for writing or modifying Excel files.

xlslib The xlslib library (https://sourceforge.net/projects/xlslib/) is a C/C++ library for creating files in the legacy Excel file format, .xls. It cannot be used for reading or modifying Excel files.

libxlsxwriter The libxlsxwriter library (https://libxlsxwriter.github.io) is a C library for creating .xlsx files. It cannot be used for reading or modifying Excel files.

LibXL The LibXL library (http://www.libxl.com) can read, write, create and modify Excel files, in both the .xls and .xlsx formats. It is the most feature complete library available and has interfaces for C, C++, C# and Delphi. It is only available for purchase, however.

QtXlsx Of the open source libraries, the QtXlsx library (https://github.com/dbzhang800/QtXlsxWriter) is the most feature complete. It is, however, based on the Qt framework. While I’m a big fan of Qt for application programming purposes, I don’t believe it is the best option for lower-level libraries.

XLNT Recently, I found the XLNT library on GitHub (https://github.com/tfussell/xlnt). It was not available when I began developing OpenXLSX. To be honest, if it had, I wouldn’t have begun OpenXLSX. It has a larger feature set and probably has fewer bugs. However, I decided to continue developing OpenXLSX, because I believe that in a few areas it is better than XLNT. Primarily, OpenXLSX is better able to handle very large spreadsheets (up to a million rows).

CrazyAlex25 ★★★
()
Ответ на: комментарий от anonymous

я пробовал. вместо таблицы читаются какие то непонятные байты.

То ты просто open(2) забыл сделать.

anonymous
()

А ssconvert не подойдёт вместо библиотеки?

frob ★★★★★
()
Ответ на: комментарий от safocl

Есть. Занимает вагон взаимоисключающей макулатуры.
https://interoperability.blob.core.windows.net/files/MS-XLS/%5bMS-XLS%5d.pdf - 43 МБ макулатуры (1124 страниц). Это не считая спеков на blob binary format (да, именно так и называется)/OLE/ActiveX и еще кучу говна что туда натащили.

Тут примерно 80% нужных ссылок: https://www.loc.gov/preservation/digital/formats/fdd/fdd000510.shtml

PPP328 ★★★★★
()
Последнее исправление: PPP328 (всего исправлений: 1)
Ответ на: комментарий от safocl

а для xls нет спека? если есть то разве сложно сделать реализацию на современном с++?

Есть: https://web.archive.org/web/20081203235018if_/http://download.microsoft.com:80/download/0/B/E/0BE8BDD7-E5E8-422A-ABFD-4342ED7AD886/Excel97-2007BinaryFileFormat(xls)Specification.pdf

Можешь посмотреть и решить, сложно или нет. Я бы лично не стал в это лезть, но я и не разработчик.

Bagrov ★★★★★
()

конвертируй в что-нибудь нормальное опенофисом и работай - кроссплатформено

anonymous
()

Пару лет назад кроссплатформенное решение я не нашел. Может можно конвертить в xlsx ср-вами MS?

aiqu6Ait ★★★★
()
Ответ на: комментарий от anonymous

Почему опенофисом? Он сейчас все конвертит без ошибок?

aiqu6Ait ★★★★
()
Ответ на: комментарий от aiqu6Ait

Какие макросы гсподи?! я думал hobbitу только данные нужны....

Упоминать какие то макросы в 2021 году это ужасный моветон😜

XoFfiCEr ★★☆☆
()

Если современный OpenOffice способен эти файлы прочитать, то: (1) запускаешь его демоном (в headless-режиме); (2) находишь и запускаешь java-сервлет JODConverter (очень давно дело было, хз жив ли он ещё), которому потом POST-запросом шлёшь документ и целевой формат, а он пинает для конвертации headless OpenOffice и возвращает тебе HTTP-ответом сконвертированный документ. Рекомендую в качестве целевого формата юзать ODT/ODS – и стандарт открытый, и идея синтаксиса похожа на HTML (зазипованный).

Как пинать headless OpenOffice самому, без посредничества JODConverter, я хз; может и можно как-нибудь несложно.

dimgel ★★★★★
()
Последнее исправление: dimgel (всего исправлений: 2)
Ответ на: комментарий от CrazyAlex25

Спасибо, но практически всё это я видел, и половина отпала, поскольку умеет только *.xlsx, а вторая умеет *.xls только на чтение.

ExcelFormat не обновлялся 10 лет и хостится на полуживом codeproject.com, но по крайней мере, есть надежда, что его можно допинать. Пришлось смонстрячить свой файл проекта (автор делал его на Visual Studio, но по счастью, там только 2 .cpp и два заголовочника) и переопределить целые типы фиксированной длины, автор не пользовался <stdint.h> и написал целую платформозависимую портянку для их определения, плохо работающую в современных реалиях. Небольшие и средние XLS-файлы библиотека жуёт, а вот на том раздутом легаси, с которым мне нужно делать информационный обмен, помирает на чтении таблиц индексов.

hobbit ★★★★★
() автор топика
Ответ на: комментарий от XoFfiCEr

в csv переформатировать совсем не вариант?

Не пойдёт, мне на выходе нужен поправленный многостраничный *.xls с сохранением форматирования.

hobbit ★★★★★
() автор топика

Чем читать файлы старого Excel

Поставьте OpenOffice, …
У них имеется API для сохранения Excel в заданном формате.

anonymous
()
Ответ на: комментарий от CrazyAlex25

Нужно было бы для себя — я бы разумеется, нашёл более элегантное решение вопроса, то же сохранение в CSV, например. Нет, нужно в условиях корпоративной работы, когда в течении длительного времени работает новая система и легаси на ёкселе.

Цена вопроса 200 евро, можно подумать, конечно. Но открытое решение было бы более мобильным, не надо геморроиться со слетевшими невовремя ключами и др..

hobbit ★★★★★
() автор топика
Ответ на: комментарий от anonymous

У них имеется API для сохранения Excel в заданном формате.

То бишь открываете программно старенький Excel и сохраняете его в нужном формате.

anonymous
()
Ответ на: комментарий от safocl

да вроде все удобореализуемо))) не вижу причин для паники)))

Если есть вагон времени, то можно, конечно. У меня вагона нет, и вангую, что скорее всего, в итоге получится ещё одна частично работающая библиотека. Хотя своё с нуля писать конечно приятнее, чем патчить чужое, кто ж спорит :)

hobbit ★★★★★
() автор топика
https://github.com/sbraconnier/jodconverter/  

https://github.com/FTrautwein/hblibxlsxwriter              libxlsxwriter wrappers for Harbour
                                                           Libxlsxwriter can be found here: https://github.com/jmcnamara/libxlsxwriter

https://github.com/jmcnamara/libxlsxwriter                 A C library for creating Excel XLSX files. https://libxlsxwriter.github.io
                                                           Libxlsxwriter: A C library for creating Excel XLSX files.

                                                           Libxlsxwriter is a C library that can be used to write text, numbers, formulas and hyperlinks to multiple worksheets in an Excel 2007+ XLSX file.

                                                           It supports features such as:

                                                           100% compatible Excel XLSX files.
                                                           Full Excel formatting.
                                                           Merged cells.
                                                           Defined names.
                                                           Autofilters.
                                                           Charts.
                                                           Data validation and drop down lists.
                                                           Worksheet PNG/JPEG images.
                                                           Memory optimization mode for writing large files.
                                                           Source code available on GitHub.
                                                           FreeBSD license.
                                                           ANSI C.
                                                           Works with GCC, Clang, Xcode, MSVC 2015, ICC, TCC, MinGW, MingGW-w64/32.
                                                           Works on Linux, FreeBSD, OpenBSD, OS X, iOS and Windows. Also works on MSYS/MSYS2 and Cygwin.
                                                           Compiles for 32 and 64 bit.
                                                           Compiles and works on big and little endian systems.
                                                           The only dependency is on zlib.



https://github.com/jmcnamara/XlsxWriter                    A Python module for creating Excel XLSX files. https://xlsxwriter.readthedocs.io

https://github.com/jmcnamara/xlsxwriter.lua                A lua module for creating Excel XLSX files. http://xlsxwriterlua.readthedocs.org/

https://github.com/jmcnamara/spreadsheet-writeexcel        Perl module to write Excel binary files http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel/

https://github.com/jmcnamara/excel-writer-xlsx             Perl module to create Excel XLSX files. 

https://github.com/jmcnamara/spreadsheet-parseexcel        Perl module to read Excel binary files http://search.cpan.org/~jmcnamara/Spreadsheet-ParseExcel/

https://github.com/libxlsxwriter/libxlsxwriter.github.io   Documentation for the libxlsxwriter library http://libxlsxwriter.github.io

https://libxlsxwriter.github.io/

https://github.com/FTrautwein/hblibxlsxwriter/blob/master/example/panes.prg
                                                           A simple example using the libxlsxwriter library to create worksheets with panes.
anonymous
()
Ответ на: комментарий от hobbit

Прости hobbit но корпоративная работа, линукс и ексель-моксель это что то совершенно несовместимое (из разных опер). С excel лучше вообще не связываться да при любой работе.

XoFfiCEr ★★☆☆
()
Последнее исправление: XoFfiCEr (всего исправлений: 2)

Если нужен временный костыль (лет 10, не более), то можно смотреть на apache poi. Если надо «на века» то форкать гнумерик.

anonymous
()
Ответ на: комментарий от hobbit

Так они кроссплатформенные - работают и на x86, и на x64.

LamerOk ★★★★★
()
Ответ на: комментарий от anonymous

форкать гнумерик

У меня уже была идея выдирать импорт из либреофиса. Гнумерик, скорее всего, попроще, но это надо смотреть, как он с такими файлами справляется.

hobbit ★★★★★
() автор топика

Можно попробовать открыть их ЛибреОфисом … /Если получится/

Владимир

anonymous
()

Если под оффтопиком то можно самим excel через OLE/COM/DCOM.

peregrine ★★★★★
()
Ответ на: комментарий от hobbit

Madre de Dios, кто принял тебя в модераторы?

anonymous
()

Рекомендую apache poi. Можно и целиком прикрутить. Можно и выдрать только нужный кусок.

Milker
()

Если тебе ехать, а не шашечки(то есть дрочиться на C++), то есть NPOI и EEPlus для .Net Core, есть POI для Java

lovesan ★★
()
7 сентября 2021 г.

Я дважды к этому снаряду подходил, правда оба раза были больше 10 лет назад. Нифига не находил что бы робило как надо. В первом случае рыл основательно, ибо альтернативой светило и стало, не самое лучшее решение в смысле куда присобачили этот обработчик. Во втором, скорее для успокоения души, что нифига нового не изобрели и мне все-таки придется вспоминать vba.

anc ★★★★★
()
Ответ на: комментарий от Kolins

Лишнее телодвижнение для пользователей, у которых до сих пор в ходу старые форматы. Для них и так внедрение новой системы будет психологическим ударом, чем меньше дополнительного геморроя - тем лучше.

hobbit ★★★★★
() автор топика

Из gnumeric-а выдрать. Из того что я видел он лучше всего открывал старые xls

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.