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

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

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

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

Сообщение waydm » 27.04.2013 14:39:32

Извиняюсь, что прямо с первого сообщения вмешиваюсь.
Есть самодельный модуль XLSX, который делает то, что вам, Gampos, нужно.
Сохранить StringGrid1 в файл Excel можно как-то так:
Код: Выделить всё
procedure TForm1.BtnCopyFromGridClick(Sender: TObject);
var
  WB: TWorkBook;
  WS: TWorkSheet;
begin
  WB:= TWorkBook.Create;
  WS:=WB.AddWorkSheet;
  WS.LoadFromStringGrid(StringGrid1);
  WB.SaveToFile('Filename.xlsx');
  WB.Free;
end;

TWorkBook, TWorkSheet - объявлены в модуле.
Наличия в системе установленного MS Office не требуется.
(сохранить можно только в файл xlsx)

Если интересно, могу выслать исходник.
waydm
незнакомец
 
Сообщения: 3
Зарегистрирован: 27.04.2013 14:03:18
Откуда: Саратов

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

Сообщение Gampos » 27.04.2013 14:57:08

Попробовал сохранить Grid в .csv , выдал кодировку ANSI as UTF-8....теперь буду пробовать менять кодировку в гриде.. посмотрю что получится...Обзательно отпишусь..

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

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

Сообщение Владимир » 27.04.2013 15:14:43

Gampos писал(а):был бы рад исходнику

Добавлять чужие модули в свой проект можно, если нет другого выхода и если понимаешь, что и как в нем делается. Старайся по возможности использовать штатные средства Лазаруса. Кроме того, не уверен, что в модуле waydm автоматом будет преобразование кодировок (могу ошибаться).
Ты в двух шагах от результата! Должно получиться - сначала Grid в UTF8, затем - в ansi.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение waydm » 27.04.2013 17:15:48

Gampos, ок, скиньте в личку свою почту.
Владимир, все от начала до конца в UTF-8, ничего преобразовывать не требуется.
А на счет приоритетного использования штатных средств - вы безусловно правы. Но, иногда, все же приходится отступать от этого правила.
waydm
незнакомец
 
Сообщения: 3
Зарегистрирован: 27.04.2013 14:03:18
Откуда: Саратов

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

Сообщение Владимир » 27.04.2013 17:35:19

waydm писал(а): все от начала до конца в UTF-8


Добавлено спустя 15 часов 46 минут 26 секунд:
Gampos писал(а):буду пробовать менять кодировку
Последний раз редактировалось Владимир 29.04.2013 21:32:23, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение *Rik* » 29.04.2013 12:38:05

Gampos писал(а):Спасибо *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   


Запрещено файлы передавать, - содержимое ксв файла.


UTF8Decode('строка')????
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 451
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

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

Сообщение Vadim » 29.04.2013 12:58:17

А Excel какой версии? 2010-ый хранит строки в кодировке UTF-8.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

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

Сообщение Gampos » 29.04.2013 15:06:04

Долго колдовал над кодировками, наконец-то получилось:)))) делюсь кодом, который экспортирует данные из стринг грида в ексель с нормальными буквами, без всяких кроказябр.....
Код: Выделить всё
procedure TForm1.Button24Click(Sender: TObject);

var str,s:WideString;
      exl:OleVariant;
      i,j:integer;

     begin
      exl:=CreateOleObject('Excel.Application');
      WorkBook:=exl.Application.WorkBooks.Add;
      Sheet:=exl.WorkBooks[1].Sheets[1];
      for i:=0 to StringGrid1.RowCount-1 do
      for j:=0 to StringGrid1.ColCount-1 do
      begin
      s:=UTF8ToAnsi(StringGrid1.Cells[j,i]);
          Sheet.Cells(i+1,j+1):= (s);
      end;
     exl.visible:=true;
       exl.application.activeWorkBook.Save;


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

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

Сообщение Владимир » 29.04.2013 15:43:33

Gampos писал(а):без всяких кроказябр

Что-то не так.
Код: Выделить всё
var
s:WideString;
....................
//это работает
s:=UTF8ToAnsi(StringGrid1.Cells[j,i]);
Sheet.Cells(i+1,j+1):= (s);//зачем здесь скобки?

//это не работает
s:=StringGrid1.Cells[j,i];
Sheet.Cells(i+1,j+1):=UTF8ToAnsi(s);

Кто-нидь объяснит?
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение amateur » 29.04.2013 15:58:24

Ужасная идея завязываться на оле (сугубо личное).

Почему не воспользоваться готовым, вполне рабочим FPSpreadsheet. Там ведь все в комплекте, вплоть до того в какую версию экселя выводить. Единственное чем не понравился - "тугая" работа опенофисом.
Аватара пользователя
amateur
энтузиаст
 
Сообщения: 552
Зарегистрирован: 03.08.2007 10:15:32

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

Сообщение Mr.Smart » 29.04.2013 16:13:30

Скобки лишние.
Здесь проблема в преобразовании типов между String и WideString.
Пробуйте так:
Код: Выделить всё
Sheet.Cells(i+1,j+1):=WideString(UTF8ToAnsi(s));
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Владимир » 29.04.2013 17:57:33

Mr.Smart писал(а):Здесь проблема в преобразовании типов между String и WideString.

Где-то здесь на форуме проскочило, что UTF8ToAnsi работает только с WideString (для кириллицы). Как умная Маша, пишу
Код: Выделить всё
var
s:WideString;
...............
s:='Текст';
Sheet.Cells[1,1]:=UTF8ToAnsi(s);

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

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

Сообщение wwswowsogon » 13.07.2015 21:33:33

Mr.Smart писал(а):Скобки лишние.
Здесь проблема в преобразовании типов между String и WideString.
Пробуйте так:
Код: Выделить всё
Sheet.Cells(i+1,j+1):=WideString(UTF8ToAnsi(s));


Спасибо!
Вы спасли моё положение :)
Всё работает, как надо!
wwswowsogon
постоялец
 
Сообщения: 157
Зарегистрирован: 23.12.2008 20:41:37

Пред.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru