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

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

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

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

Сообщение Gampos » 25.04.2013 08:38:42

Здравствуйте. Делаю программу, но столкнулся с трудностями.
Помогите с экспортом данных из StringGrid в Excel (или Word, если есть материалы). Обыскал весь интернет, не нашел ничего подходящего.
Аватара пользователя
Gampos
новенький
 
Сообщения: 17
Зарегистрирован: 25.04.2013 08:24:40
Откуда: Владивосток

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

Сообщение Владимир » 25.04.2013 09:48:19

Вообще-то полагается указывать ОС... Полагаю, что Винда.
В Дельфи я такое делал через OLE.
Код: Выделить всё
uses ..... comobj,OleServer;

procedure TForm1.SpeedGoClick(Sender: TObject);
const
xlEdgeLeft=$00000007;
xlEdgeTop=$00000008;
xlEdgeBottom=$00000009;
xlEdgeRight=$0000000A;
xlContinuous=$00000001;
xlMedium=$FFFFEFD6;//жирная линия
   xlThin=$00000002;//тонкая линия
  xlInsideVertical=$0000000B;
xlInsideHorizontal=$0000000C;
xlDiagonalDown=$00000005;
xlDiagonalUp=$00000006;
xlSolid=$00000001;
var
exl:OleVariant;
WorkBook,Sheet:Variant;
CurRow:Integer;//номер текущей строки
begin
exl:=CreateOleObject('Excel.Application');//создаем объект
WorkBook:=exl.Application.WorkBooks.Add;//добавляем книгу
Sheet:=exl.WorkBooks[1].Sheets[1];//страница

        Sheet.Columns['A:A'].ColumnWidth:=2.57;//указываем ширину столбцов
        Sheet.Columns['I:I'].ColumnWidth:=2.57;
        Sheet.Columns['B:B'].ColumnWidth:=7.17;
        Sheet.Columns['C:C'].ColumnWidth:=6.17;
        Sheet.Columns['D:D'].ColumnWidth:=6.17;

        Sheet.Columns['E:E'].ColumnWidth:=4.50;
        Sheet.Columns['G:G'].ColumnWidth:=7.33;
        Sheet.Columns['J:J'].ColumnWidth:=6.17;

        Sheet.Columns['K:K'].ColumnWidth:=4.50;
        Sheet.Columns['M:M'].ColumnWidth:=7.33;
        Sheet.Columns['O:O'].ColumnWidth:=5.00;
        Sheet.Columns['Q:Q'].ColumnWidth:=5.00;
        Sheet.Columns['P:P'].ColumnWidth:=5.00;
   CurrRow:=1;//встали на 1-ю строку
  Sheet.Cells(CurrRow-1,3):='Заголовок 3-го столбца';
  Sheet.Cells(CurrRow-1,10):='Заголовок 10-го столбца';

CurRow:=CurRow+1;
  Sheet.Cells(CurrRow-1,3):='abcdef';//вставляем наши данные

//здесь можно заняться оформлением - обрамить таблицу жирной линией
Row:='A'+st_row+':R'+fin_row;//указываем выделние области
  Sheet.Range[Row].Select;
  //exl.Selection.Interior.ColorIndex:=40;
  //exl.Selection.Interior.Pattern:=xlSolid;
{ exl.Selection.Borders[xlEdgeLeft].LineStyle:= xlContinuous;
exl.Selection.Borders[xlEdgeLeft].Weight:=xlThin;// xlThin;
       // .ColorIndex = xlAutomatic;
exl.Selection.Borders[xlEdgeTop].LineStyle:= xlContinuous;
exl.Selection.Borders[xlEdgeTop].Weight:=xlThin;
        //ColorIndex = xlAutomatic
exl.Selection.Borders[xlEdgeBottom].LineStyle:= xlContinuous;
exl.Selection.Borders[xlEdgeBottom].Weight:=xlThin;
       //ColorIndex = xlAutomatic
exl.Selection.Borders[xlEdgeRight].LineStyle:= xlContinuous;
exl.Selection.Borders[xlEdgeRight].Weight:=xlThin;
        //ColorIndex = xlAutomatic
                                 
exl.Selection.Borders[xlInsideVertical].LineStyle:= xlContinuous;
exl.Selection.Borders[xlInsideVertical].Weight:=xlThin;

exl.Selection.Borders[xlInsideHorizontal].LineStyle:= xlContinuous;
exl.Selection.Borders[xlInsideHorizontal].Weight:=xlThin;  }


exl.visible:=True;//показываем
//exl.Application.ActiveWorkBook.SaveAs(FileName);
exl.Application.ActiveWorkBook.Save; //сохраняемся

end;

Как-то так...
p.s. Кто-то здесь на форуме хорошо сказал - Я дал вам рыбу, а здесь - как ее ловить
http://www.delphikingdom.ru/asp/viewite ... alogid=249
Последний раз редактировалось Владимир 25.04.2013 10:20:40, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение Gampos » 25.04.2013 10:14:56

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

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

Сообщение heks » 25.04.2013 10:41:11

Попробуй http://wiki.freepascal.org/FPSpreadsheet/ru.
Не требует установки офиса, хорошее описание + куча примеров.
heks
новенький
 
Сообщения: 29
Зарегистрирован: 23.07.2012 11:50:39

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

Сообщение Gampos » 25.04.2013 10:53:42

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

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

Сообщение Владимир » 25.04.2013 11:12:39

Gampos писал(а):да, действительно виндовс, 7, попробую ваш код и скажу результат.

Вот еще
viewtopic.php?f=5&t=2355&hilit=OLE
Советуют не запускаться в Лазарусе!
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение alex208210 » 25.04.2013 11:27:46

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

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

Сообщение Gampos » 25.04.2013 11:30:06

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

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

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

Сообщение vada » 25.04.2013 11:39:58

А почему не попробовать грид в csv файл записать? Екселом открывается запростяк.
Аватара пользователя
vada
энтузиаст
 
Сообщения: 691
Зарегистрирован: 14.02.2006 13:43:17

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

Сообщение Gampos » 25.04.2013 11:46:11

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

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

Сообщение Владимир » 25.04.2013 12:02:55

Gampos писал(а):как думаете

Ошибка выхода за пределы диапазона.
1. Убрать из кода всю начинку, оставить только создание и показ пустой страницы.
2. Компилировать в Лазарусе (Запуск-Быстрая компиляция), а запускать отдельно.

Добавлено спустя 11 минут 15 секунд:
Gampos писал(а):идея отличная

StringGrid.SaveToFile('\имя каталога\grid.csv'); //StringGrid - твоя таблица
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

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

Сообщение Gampos » 25.04.2013 12:16:55

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

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

Сообщение Владимир » 25.04.2013 13:16:25

Gampos писал(а):спасибо что помогаете,

Ссылку
viewtopic.php?f=5&t=2355&hilit=OLE
читал?
1. Попробуй в uses добавить variants
2. Если падает при компиляции - комментируй поочередно строки и ищи, где валится.
К сожалению, у меня нет Лазаруса под Виндой, поэтому смоделировать ситуацию не могу.
Это пробовал?
Код: Выделить всё
StringGrid.SaveToFile('C:\имя каталога\grid.csv'); //StringGrid - твоя таблица

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

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

Сообщение alexey38 » 25.04.2013 17:55:02

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

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

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

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

Сообщение Владимир » 25.04.2013 18:30:24

alexey38 писал(а):А какой смысл делать экспорт в Excel, если Excel не установлен?

Согласен на 146%. Вообще-то начало поста в принципе неправильное - вопрошающий не указал ни ОС, ни версии FPC и Лазаруса, ни цели проекта. Ну, сделаем скидку как новичку.

Добавлено спустя 6 минут 57 секунд:
alexey38 писал(а):Но в этом случае без форматирования.

Опять же нет желаемого результата проекта. Например, если это единственный отчет, ничто не мешает извратиться и написать в Excel макрос для форматирования после открытия .csv.
Последний раз редактировалось Владимир 25.04.2013 18:57:31, всего редактировалось 1 раз.
Владимир
постоялец
 
Сообщения: 355
Зарегистрирован: 23.08.2007 19:48:39
Откуда: Москва

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 22

Рейтинг@Mail.ru