LINUX.ORG.RU
ФорумTalks

Вот как переходить на открытые форматы, если всё вот так?

 , ,


0

3

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

Требования были следующие: Легковесная C++ библиотека для записи\чтения ods или xlsx файлов. Так для xlsx я нашел таких сразу 2(OpenXLSX и xlnt) и ещё одну зависимостью от Qt. А для ods всего одну библиотеку и ту с безальтернативными Qt(так ещё и полудохлую с 16 звездами на гитхабе). И я хоть и не тулкитофоб, но тащить Qt исключительно ради чтения ods - это перебор.

Ну и вопрос - Доколе? И как в такой ситуации поддерживать открытые форматы?

★★★★★

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

К сожалению за такую работу мне на работе платить не будут. Можно конечно пилить в свободное от работы время, но пока буду пилить, на работе придется всё равно использовать богомерзкий xlsx, ибо нужно уже сегодня.

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

К сожалению за такую работу мне на работе платить не будут

Это и есть ответ на твоё возмущение

alex1101
()
Ответ на: комментарий от futurama

Для чтения наверное особо ничего, кроме того что придется сначала изучить ods-формат(сделать Row(11).Cell().Value() уже не выйдет). Ну и то что надо не только читать, но и немного генерировать отчеты, где нужно стили выставлять и мержить некоторые ячейки, а это уже придется в стандарт ods погружаться капитально так.

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

Если нужны только данные, то самое простое - это экспорт-импорт csv текстовых файлов.
Если с форматированием, то есть конвертация с формата в формат
https://ask.libreoffice.org/t/convert-to-command-line-parameter/840

Что-то вроде такого:

soffice --headless --convert-to xls --outdir "mydir" "myfile.ods"

soffice --headless --convert-to ods:"calc8" --outdir "mydir" "myfile.xls"

P.S. Не библиотека, конечно.

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

И как в такой ситуации поддерживать открытые форматы?

Для таблиц поддерживай CSV.

aiqu6Ait ★★★★
()

Это сишка никому не нужна. Для жабаскрипта навалом

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

Для MS форматов я же написал. 2 библиотеки есть: xlnt и OpenXLSX. И они даже без тяжелых зависимостей типа Qt. А для, казалось бы, открытого ODS, ничего нет сопоставимого уровня. Одна полумертвая либа и та Qt тянет.

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

Ой, сорян, читал и думал о другом, видимо.

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

Так кого конвертировать то? Переформулирую. У нас есть данные в массивах сишных, их надо экспортнуть в отчет. Стоял выбор, сделать красиво в открытые форматы или сделать в богомерзкую проприетарь. В итоге, из-за отсутствия либ, приходится делать в проприетарь. А дальше уже не важно, в ods или в pdf конвертить, возможность сделать первоначальное сохранение в ods - уже провалена.

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

Просто таблицу с текстом и числами проще в csv выгрузить. Формат примитивнейший, никакого дроча, открывается и MSO и LO.

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

Ну это же пользовательский софт, шапка нужна хотя бы минимальная, это будут условные бухгалтера читать. Была идея выгружать csv + ods с «формулами» подтягивающими данные из csv, как из БД, но это показалось слишком сложным.

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

У нас есть данные в массивах сишных

На си массивы в такого вида строки превратить?
N;Дата;Переводы;Валюта
1;01.09.2023;3000;РУБЛИ
2;02.09.2023;22000;РУБЛИ
...
Что там за массивы? Или в них ядерная физика?

На днях табличку stringgrid в лазарусе одной строчкой в csv копировал
https://lazarus-ccr.sourceforge.io/docs/lcl/grids/tcustomstringgrid.savetocsv...

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

Что там за массивы? Или в них ядерная физика?

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

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

А на выходе потом надо редактировать это все получившееся?

Можно все это красиво экспортнуть в LaTeX и собрать потом в красивую PDF автоматически. Без всяких офисов вообще.

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

Тогда это будет требовать установленный LaTeX. Тоже лишняя зависимость. В итоге пишу xlsx, хоть это и не правильно. Зато нет зависимостей(которые нельзя прилинковать) и на выходе готовый файл, который можно и открыть и по почте отправить.

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

У меня профдеформация, наверное, но я бы просто все это упаковал в докер вместе с латехом, и оттуда получал одной командой файл. И контейнер можно хоть на Луне запустить, если доступ к реджистри есть :)

Zhbert ★★★★★
()

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

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

Я запутался, наверное.
Если даны только данные для вывода, то их форматированием стоит заниматься уже в (libre/MS) офисе.
Программно форматировать таблички можно, но инструментов будет почти бесконечно меньше, чем собственно в офисе.
Я как-то выводил данные в excel с форматированием, но ничего более сложного, чем выставление размеров шрифтов, обрамления, центрирования, назначения цвета, не было.

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

У меня профдеформация, наверное, но я бы просто все это упаковал в докер вместе с латехом

У меня в софте это малая часть функциональности, которая просто вызывается по «Сохранить отчет» в программе на плюсах. И делать такую небольшую часть через отдельный контейнер, кажется оверкилл жуткий.

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

Я как-то выводил данные в excel с форматированием, но ничего более сложного, чем выставление размеров шрифтов, обрамления, центрирования, назначения цвета, не было

Так этого и достаточно для 90% случаев.

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

Это было давно и под windows.
Можно сделать ещё такой приём: выводить данные в уже отформатированный как надо шаблон (template) .

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

Была идея выгружать csv + ods с «формулами» подтягивающими данные из csv, как из БД, но это показалось слишком сложным.

Я так делал в продакшене. Пока главный скрипт/программа делает свою работу, она (программа) в отдельный текстовый файл скидывает данные для отчета. Потом «готовый» отчет в видет report.ods с макросом (VB app). Открывает текстовый файл с данными, парсит его и раскладывает данные по ячейкам. Люди не жалуются, работают с этим

Примитивный парсер для строк типа
название,значение

  if FileExists(filename) then
	num = FreeFile()
	open filename for input as #num 
	do while not eof(num)
        Line Input #num, str
		s=Split(str, ",")
		len=UBound(s)
		if s(0) = "partnumber" then
			sheet.getCellByPosition(1, 6).String = s(1)
		elseif s(0) = "jobrevision" then
			sheet.getCellByPosition(4, 6).String = s(1)
		elseif s(0) = "customer" then
			sheet.getCellByPosition(1, 4).String = s(1)
		elseif s(0) = "jobname" then
			sheet.getCellByPosition(4, 4).String = s(1)
		else
			sheet.getCellByPosition(col, row).String = s(0)
			sheet.getCellByPosition(col-1, row).Value = s(1)
			if len >= 2 then
				sheet.getCellByPosition(col-2, row).Value = s(2)
			endif
			if len >= 3 then
				sheet.getCellByPosition(col-3, row).Value = s(3)
			endif
			if len >= 4 then
				sheet.getCellByPosition(col-4, row).Value = s(4)
			endif
			sheet.getCellByPosition(col-7, row).Value = 10
			row = row +1
		endif
	loop
	close
futurama ★★★★★
()
Последнее исправление: futurama (всего исправлений: 1)
Ответ на: комментарий от Loki13

Можно без всякого доп. софта сгенерировать в html и смотреть браузером. При необходимости из html можно сделать pdf всё тем же браузером.

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

Мы же на Linux.org.ru, тут пацанский способ – это awk + troff.

buddhist ★★★★★
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)