StringGrid экспорт данных Excel
Модератор: Модераторы
- Gampos
- новенький
- Сообщения: 17
- Зарегистрирован: 25.04.2013 08:24:40
- Откуда: Владивосток
- Контактная информация:
StringGrid экспорт данных Excel
Здравствуйте. Делаю программу, но столкнулся с трудностями.
Помогите с экспортом данных из StringGrid в Excel (или Word, если есть материалы). Обыскал весь интернет, не нашел ничего подходящего.
Помогите с экспортом данных из StringGrid в Excel (или Word, если есть материалы). Обыскал весь интернет, не нашел ничего подходящего.
Вообще-то полагается указывать ОС... Полагаю, что Винда.
В Дельфи я такое делал через OLE.
Как-то так...
p.s. Кто-то здесь на форуме хорошо сказал - Я дал вам рыбу, а здесь - как ее ловить
http://www.delphikingdom.ru/asp/viewite ... alogid=249
В Дельфи я такое делал через 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 раз.
Попробуй http://wiki.freepascal.org/FPSpreadsheet/ru.
Не требует установки офиса, хорошее описание + куча примеров.
Не требует установки офиса, хорошее описание + куча примеров.
Gampos писал(а):да, действительно виндовс, 7, попробую ваш код и скажу результат.
Вот еще
viewtopic.php?f=5&t=2355&hilit=OLE
Советуют не запускаться в Лазарусе!
-
alex208210
- постоялец
- Сообщения: 207
- Зарегистрирован: 12.05.2010 13:16:51
Не советую использовать OLE, так как это привязка к установке офиса, что есть плохо. Есть более удобные производительные решения собранные в компоненты, которые позволяют быстро и удобно делать экспорт
- Gampos
- новенький
- Сообщения: 17
- Зарегистрирован: 25.04.2013 08:24:40
- Откуда: Владивосток
- Контактная информация:
Владимир, попробовал код задействовать,
пишет "проект project1 вызвал класс исключения 'EOleException' с сообщением: ### (gdb unparsed remainders 0x0 out of bounds"
как думаете.
Добавлено спустя 2 минуты 15 секунд:
Сообщение alex208210 , пожалуйста, посоветуйте подходящее под ексель или ворд решение.
пишет "проект project1 вызвал класс исключения 'EOleException' с сообщением: ### (gdb unparsed remainders 0x0 out of bounds"
как думаете.
Добавлено спустя 2 минуты 15 секунд:
Сообщение alex208210 , пожалуйста, посоветуйте подходящее под ексель или ворд решение.
А почему не попробовать грид в csv файл записать? Екселом открывается запростяк.
Gampos писал(а):как думаете
Ошибка выхода за пределы диапазона.
1. Убрать из кода всю начинку, оставить только создание и показ пустой страницы.
2. Компилировать в Лазарусе (Запуск-Быстрая компиляция), а запускать отдельно.
Добавлено спустя 11 минут 15 секунд:
Gampos писал(а):идея отличная
StringGrid.SaveToFile('\имя каталога\grid.csv'); //StringGrid - твоя таблица
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 раз.
alex208210 писал(а):Не советую использовать OLE, так как это привязка к установке офиса, что есть плохо. Есть более удобные производительные решения собранные в компоненты, которые позволяют быстро и удобно делать экспорт
А какой смысл делать экспорт в Excel, если Excel не установлен? Вывод в Excel/Word очень удобен именно как способ формирования отчетов. И OLE для этих целей самое удобное и правильное, но я не уверен, что OLE хорошо работает в FPC/Lasarus, раньше работало не очень. В Дельфях хорошо реализовано.
Если нужно вывести инфу без привязки к конкретному офису, то тогда проще сохранить csv. Но в этом случае без форматирования.
alexey38 писал(а):А какой смысл делать экспорт в Excel, если Excel не установлен?
Согласен на 146%. Вообще-то начало поста в принципе неправильное - вопрошающий не указал ни ОС, ни версии FPC и Лазаруса, ни цели проекта. Ну, сделаем скидку как новичку.
Добавлено спустя 6 минут 57 секунд:
alexey38 писал(а):Но в этом случае без форматирования.
Опять же нет желаемого результата проекта. Например, если это единственный отчет, ничто не мешает извратиться и написать в Excel макрос для форматирования после открытия .csv.
Последний раз редактировалось Владимир 25.04.2013 18:57:31, всего редактировалось 1 раз.
