StringGrid экспорт данных Excel

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Re: StringGrid экспорт данных Excel

Сообщение alex208210 » 26.04.2013 09:07:08

Владимир писал(а):
alex208210 писал(а):Видимо вы не сталкивались с написанием программ по формированию отчетов и рассуждаете на уровне "нарисовать красивую табличку директору и показать".

Это Вам так кажется. Напомню, речь идет об экспорте TStrinGrid в Excel, и только. Далее можно предположить, что пользователь уже средствами Excel отформатирует данные, выявит некие тенденции, нарисует графики и т.п. для принятия каких-то решений. Вы пишете об отчетах в несколько тысяч строк - не очень понятно, зачем такую уйму информации тащить в Excel и что с ней потом делать? Функциональность приложения (в нашем случае на Лазарусе) должна позволять вытаскивать из БД требуемую совокупность данных, а задача Excel - представить все это наглядно.

Добавлено спустя 10 минут 40 секунд:
alexey38 писал(а):Если понаблюдать за работой пользователя с отчетами (если не брезговать юзером), то можно увидеть, что юзер часто начинает вводить свои соотношения, чтобы ему было легче понять. Адаптировать под это каждый раз прогу нет смысла, да и разные юзеры могут хотеть разное.

Поддерживаю на 146%.


спросите это например у налоговой.. зайдите в отчеты по трате налогов государства и увидите именно такие таблицы именно отчеты

Добавлено спустя 1 минуту 3 секунды:
Добавлено спустя 3 минуты 48 секунд:
alex208210 писал(а):Эксель таблицы говорите для экселя делаются?) Эксель таблицы делаются для универсальности с уверенностью того что они откроются и на компе с экселем и на компе с либреофисом.

Екселовские таблицы делаются для екселя, а либокалсковские таблицы делаются для либрокалка.


если у вас личная неприязнь к либреофису это не дает повода всех пересаживать на эксель.. таблицы экселя делаются для универсальности.
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: StringGrid экспорт данных Excel

Сообщение alexey38 » 26.04.2013 09:25:35

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

Романтическая наивность и не более. Когда жизненный опыт 2-3 года, то у многих возникает такой взгляд на универсальность. Но это не универсальность, это антиуниверсальность. Классическая ошибка романтических универсалистов в том, что они узкий аспект задачи делают суперуниверсальным, но 90-99% задачи является частным решением. Практика показывает, что в большинстве случаев универсалисты не угадывают, где требуется универсальность.

Например, приносишь решение с локальной БД, а тебе говорят, что ни катит, что локальные БД не попадают под бэкапы, и типа нет спецов, контролировать целостность данных, и т.п. И начинается процесс перевода под какой-нибудь Оракл, и основной фишкой становится авторизация, безопасное хранение учетных записей, т.к. юзерские права не имеют доступа к БД. Вот и получается, что думаешь, что решение универсальное, но по факту оно частное.

С файло-ориентированными отчетами (xml) тоже бывает не все гладко. Бывают свои нюансы. Так что универсальностью там и не пахнет.

Добавлено спустя 5 минут 58 секунд:
alex208210 писал(а):если у вас личная неприязнь к либреофису это не дает повода всех пересаживать на эксель.. таблицы экселя делаются для универсальности.

У меня нет неприязни к либоофису (у меня на компе он стоит с первых версий опенофиса, но это не отменяет наличие екселя), тем, кто работает с тем софтом, для тех делаем работу под либрокалк. Универсальность - это детский сад.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: StringGrid экспорт данных Excel

Сообщение alex208210 » 26.04.2013 09:35:22

ладно не буду спорить может быть вы и правы про универсальность, но стремиться к этому все же нужно
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: StringGrid экспорт данных Excel

Сообщение alexey38 » 26.04.2013 09:42:55

alex208210 писал(а):спросите это например у налоговой.. зайдите в отчеты по трате налогов государства и увидите именно такие таблицы именно отчеты

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

Добавлено спустя 4 минуты 37 секунд:
alex208210 писал(а):ладно не буду спорить может быть вы и правы про универсальность, но стремиться к этому все же нужно

У меня есть реальная задача, когда я в Excel через OLE для последующей обработки пользователем, выдаю данные 30 тыс. строк, 146 колонок. Файл в формате 2003 екселя занимает 76 Мб, в формате 2007 еще меньше, файл в XML занимает 280 Мб. Вывод такого объема через OLE не очень медленно работает. А насчет xml тут еще сомнения.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: StringGrid экспорт данных Excel

Сообщение Владимир » 26.04.2013 10:20:18

alex208210 писал(а):зайдите в отчеты по трате налогов государства и увидите именно такие таблицы именно отчеты

Не думаю, что такая инфа есть в открытом доступе (или плохо искал). На официальном сайте налоговой в основном красивые картинки и консолидированные цифры:
http://analytic.nalog.ru/portal/index.ru-RU.htm
Ну да ладно. И что, там отчеты экспортируют в Excel? Для вывода на печать?

Добавлено спустя 10 минут 9 секунд:
alexey38 писал(а):У меня есть реальная задача, когда я в Excel через OLE для последующей обработки пользователем, выдаю данные 30 тыс. строк, 146 колонок.

Ух ты, круто! Наверное, это правильно - если уж установлен Excel, надо использовать его функциональность по максимуму!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: StringGrid экспорт данных Excel

Сообщение alex208210 » 26.04.2013 10:57:14

Владимир писал(а):
alex208210 писал(а):зайдите в отчеты по трате налогов государства и увидите именно такие таблицы именно отчеты

Не думаю, что такая инфа есть в открытом доступе (или плохо искал). На официальном сайте налоговой в основном красивые картинки и консолидированные цифры:
http://analytic.nalog.ru/portal/index.ru-RU.htm
Ну да ладно. И что, там отчеты экспортируют в Excel? Для вывода на печать?


Бюджетная роспись есть много открытых данных просто они все запрятаны так что ненайдешь
Там есть таблицы по 30 тыс строк
alex208210
постоялец
 
Сообщения: 207
Зарегистрирован: 12.05.2010 13:16:51

Re: StringGrid экспорт данных Excel

Сообщение alexey38 » 26.04.2013 11:32:08

alex208210 писал(а):Бюджетная роспись есть много открытых данных просто они все запрятаны так что ненайдешь
Там есть таблицы по 30 тыс строк

Скачал по ссылке первый же отчет, и он выложен в формате Excel, а не в формате XML.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: StringGrid экспорт данных Excel

Сообщение *Rik* » 26.04.2013 12:36:52

Могу предложить альтернативный вариант...
Мой интерпретатор Object Pascal, малость допилил, чтобы с Excel работал. В данном случае у вас даже будет преимущество, код для формирования отчета, вынесенный за пределы выполняемой программы, может быть сохранен отдельно в текстовом файле и не потребуется перекомпиляция всей программы для изменения отчета, нужно будет только исправить скрипт.
http://visual-t.ru/files/SuCompil.zip
Сейчас попробовал, пример с интерпретатором на Lazarus 1.0.6 компилируется, пример (скрипт) для excel заправлен по умолчанию...
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: StringGrid экспорт данных Excel

Сообщение Владимир » 26.04.2013 12:51:01

Gampos писал(а):Владимир, попробовал код задействовать,
пишет "проект project1 вызвал класс исключения 'EOleException' с сообщением: ### (gdb unparsed remainders 0x0 out of bounds"
как думаете.

Вроде разобрался с твоим exception. Установил на Win XP Lazarus v1.0.6.
Код: Выделить всё
uses ....comobj

procedure TForm1.Button1Click();
var
str:WideString;//чтобы кириллица корректно отображалась
exl:OleVariant;
WorkBook,Sheet:Variant;
CurrRow:Integer;
begin
exl:=CreateOleObject('Excel.Application');
WorkBook:=exl.Application.WorkBooks.Add;
Sheet:=exl.WorkBooks[1].Sheets[1];

CurrRow:=1;
        Sheet.Columns['A:A'].ColumnWidth:=2.57;
        Sheet.Columns['I:I'].ColumnWidth:=2.57;
   
        str:=Utf8ToAnsi('Текст');
        Sheet.Cells(CurrRow,3):=str;//вывод текста
       
        Sheet.Cells(CurrRow,10):=IntToStr(9);//вывод числа

exl.visible:=True;
exl.Application.ActiveWorkBook.Save;
end;

Проблема была в том, что нумерация строк в Excel начинается не с 0, а с 1.
Далее Запуск-Собрать, запуститься вне Лазаруса. Успехов.
p.s. не забудь
http://subreal-team.com/blog/2012/12/21 ... zarus-exe/
Последний раз редактировалось Владимир 26.04.2013 17:23:19, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: StringGrid экспорт данных Excel

Сообщение Frolik » 26.04.2013 15:15:47

А я делаю хтмл документ, который всегда открывается в экселе, почти всегда в libre, и всегда в браузере. Без использования OLE , сторонних компонентов и прочего.
Frolik
постоялец
 
Сообщения: 275
Зарегистрирован: 18.08.2011 11:52:32

Re: StringGrid экспорт данных Excel

Сообщение vada » 26.04.2013 15:23:56

Также они открываются и в Word и в Writer
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

Re: StringGrid экспорт данных Excel

Сообщение alexey38 » 26.04.2013 15:57:18

Frolik писал(а):А я делаю хтмл документ, который всегда открывается в экселе, почти всегда в libre, и всегда в браузере. Без использования OLE , сторонних компонентов и прочего.

Думаю, что разные технологии имеют оптимальное применение для разных задач. Если стоит задача создать файл, который когда-то потом (или сейчас) на каком-то компьютере нужно будет открыть и посмотреть, то для этого случая безусловно будет лучше использовать XML, использовать Excel как средство формирования ФАЙЛА конечно не эффективно и даже глупо. Но если стоит задача на этом конкретном компьютере вызвать Excel, вывести в него данные, что-то подформатировать, чтобы пользователь в интерактивном режиме продолжил работу, тогда нужно именно OLE, т.к. только OLE позволяет интерактивно работать с одним документом, например, нужно довывести данные в открытый отчет, с сохранением все наработок пользователя по форматированию. Аналогично через OLE мы делаем отчеты, пользователь их проверят, вносит корректировки прямо в Excel, и программа затем обратно всасывает данные, проверяет, обрабатывает, что-то выгружает обратно в Excel, что-то сохраняем в БД.
alexey38
долгожитель
 
Сообщения: 1627
Зарегистрирован: 27.04.2011 19:42:31

Re: StringGrid экспорт данных Excel

Сообщение Владимир » 26.04.2013 17:48:44

alexey38 писал(а):Думаю, что разные технологии имеют оптимальное применение для разных задач.

Опять же трудно не согласиться! Для конкретной задачи - конкретный инструментарий, универсализм есть зло, как морковка перед ишаком, вот сейчас тут подправлю, вот еще чуть-чуть в том скрипте подшаманю и... - сделаю всем счастие одним, универсальным способом!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

Re: StringGrid экспорт данных Excel

Сообщение Alex2013 » 26.04.2013 18:25:04

alexey38 писал(а):
alex208210 писал(а):Не советую использовать OLE, так как это привязка к установке офиса, что есть плохо. Есть более удобные производительные решения собранные в компоненты, которые позволяют быстро и удобно делать экспорт

А какой смысл делать экспорт в Excel, если Excel не установлен? Вывод в Excel/Word очень удобен именно как способ формирования отчетов. И OLE для этих целей самое удобное и правильное, но я не уверен, что OLE хорошо работает в FPC/Lasarus, раньше работало не очень. В Дельфях хорошо реализовано.

Если нужно вывести инфу без привязки к конкретному офису, то тогда проще сохранить csv. Но в этом случае без форматирования.

А DDLка на Дельфи не спасет отца русской демократии ?
Меня несколько раз спасала (Например использую библиотеку интерпретации паскалеских скриптов по не вполне ясной причине не компилируемой в Лазарусе )
Alex2013
долгожитель
 
Сообщения: 3134
Зарегистрирован: 03.04.2013 11:59:44

Re: StringGrid экспорт данных Excel

Сообщение Gampos » 27.04.2013 05:55:52

Спасибо *Rik* , первоклассный исходник, наглядно показано,
Попробовал от Владимира код импортировать, превосходно выходит. Спасибо.

Не сочтите за наглость, но можете посоветовать, как правильно указать кодировку, при экспорте данных из стринг грид (версия лазаруса 1.0. 8 ).
На выходе в ксв получается (кракозябры). Если потом импортировать в ексель, с указанием уникод УТФ8, буквы становятся нормальными.
Можно ли при экспорте в ксв принудительно задать эту кодировку?

Код: Выделить всё
Дата   в„– колект   РќР°С‡.смены   РЎРјРµРЅР°   Р СѓРґР°Zn   Р СѓРґР°Pb   РҐРІРўРµС…Zn   РҐРІРўРµС…Pb   РљРѕРЅР¦РёРЅZn   РљРѕРЅР¦РёРЅPb   РљРѕРЅР¦РёРЅFe   РљРѕРЅРЎРІZn   РљРѕРЅРЎРІPb   РҐРІРўРѕРІZn   РҐРІРўРѕРІPb   Р РµР¶Р˜Р·1СЃС‚   Р РµР¶Р˜Р·2СЃС‚   Р РµР¶Р˜Р·РљР»+315   Р’Р»Zn   Р’Р»Pb   РџСЂРёРјРµС‡Р°РЅРёРµ
27.04.2013   РІС‚?   РњСѓРґСЂРµС†РѕРІР°   РґРЅРµ   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   5,5   


Запрещено файлы передавать, - содержимое ксв файла.
Аватара пользователя
Gampos
новенький
 
Сообщения: 17
Зарегистрирован: 25.04.2013 08:24:40
Откуда: Владивосток

Пред.След.

Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 14

Рейтинг@Mail.ru