выгрузка в Exel из под линукса.

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

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

выгрузка в Exel из под линукса.

Сообщение Attid » 29.04.2007 12:14:52

кто-нибуть занимался таким?
если да то как подойти ?


или может я не так подхожу, мысль такая, некоторые отчеты в линуксовой программе которая отоброжает их в гриде надо чтоб пользователь мог унести домой и поработать с ними в exel
можно конечно посто выгрузить в файл с раздлителями и в эксель импортировать но это уже не то. не буду же я директора напрягать такими телодвижениями.
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение betatester » 29.04.2007 13:05:47

В Delphi это делалось через OLE - механизм.
Т.е., из программы вызвался Excel как сервер, создавался новый документ и туда совались данные, документ сохранялся, сервер уничтожался.
В Linux это по определению не возможно.

Нужно, ИМХО, копать в сторону OpenOffice - если там какой-либо похожий механизм... Но мне видиться, что ничего не выйдет.

Единственный, ИМХО, метод - сохранение в каком-либо открытом формате - dot separeted или XML...
betatester
постоялец
 
Сообщения: 276
Зарегистрирован: 27.04.2007 22:21:45

Сообщение Sergei I. Gorelkin » 29.04.2007 13:25:03

На torry.net я видел пример выгрузки данных прямо в .xls, правда, какой-то древней версии (2.0?).
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1405
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Сообщение Alexander » 29.04.2007 14:42:21

посмотри:
http://search.cpan.org/dist/Spreadsheet-WriteExcel/
http://diswww.mit.edu/bloom-picayune.mit.edu/perl/23422

http://swik.net/XLS

на стороне клиента:
http://www.nicolaottomano.it/public/csv2xls.zip

А ещё можно попробовать переименовать файл csv в xls,
Может эксель это проглотит с минимальными вопросами ?
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение Михаил » 03.05.2007 11:41:31

совсем недавно делал подобную пересылку из XML файлов либо в OpenOffice, либо в MS Offiсe.
если нужно, могу переслать на ящик (ссылок не сохранил) два файла, список OLE-функций для MS Exel и OO Calc
Аватара пользователя
Михаил
новенький
 
Сообщения: 13
Зарегистрирован: 31.10.2006 14:27:31

Сообщение Attid » 03.05.2007 13:04:19

давай
мой ник собака яндекс точка ру
Аватара пользователя
Attid
долгожитель
 
Сообщения: 2585
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E

Сообщение dunin » 03.05.2007 14:18:03

Михаил писал(а):...если нужно, могу переслать на ящик (ссылок не сохранил) два файла, список OLE-функций для MS Exel и OO Calc

А мне можно?

мойник@mail.ru

Спасибо.
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Сообщение Alexander » 03.05.2007 17:40:09

А эта штука бесполезна ? (http://search.cpan.org/dist/Spreadsheet-WriteExcel/)
Аватара пользователя
Alexander
энтузиаст
 
Сообщения: 771
Зарегистрирован: 18.12.2005 19:10:00
Откуда: оттуда

Сообщение dunin » 04.05.2007 07:01:38

Ну, раз пошла такая пьянка...

1. Михаил, за пример спасибо!

2. Если расковыривать пример который к OpenOffice, то вот какой вопрос возникает:

если так
Код: Выделить всё
Cell := Sheet.getCellByPosition(0, 0);
Cell.setString:= 'Типа занесли что-то';

то все нормально, вот если диапазон ячеек выделять
Код: Выделить всё
Cell := Sheet.getCellRangeByPosition(0, RecCount, 0, FldCount);


то как сразу этому диапазону значение задать?
Код: Выделить всё
Cell.set??????:= TableVals; // заранее сформированный вариантный массив


В Excell работало без проблем. В OpenOffice реально задать значения сразу диапазону? Ну, чтобы по таблице в цикле не бегать...
Аватара пользователя
dunin
энтузиаст
 
Сообщения: 634
Зарегистрирован: 02.05.2007 13:18:11
Откуда: Тољя††и

Re: выгрузка в Exel из под линукса.

Сообщение andal » 07.05.2007 11:24:56

Attid писал(а):кто-нибуть занимался таким?
если да то как подойти ?


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


А я выгружаю в html формате и расширение ставлю xls - нормально смотрится.
andal
незнакомец
 
Сообщения: 9
Зарегистрирован: 21.03.2007 11:00:47

Сообщение voltron » 17.09.2007 14:55:09

Копался в своих архивах, и нашел код для выгрузки данных в Excel, наличие самого Excel'я не требуется. Код не мой, ссылка на оригинал тоже утеряна :( ... Может, кому-то пригодится
Код: Выделить всё
unit xlfunct;

interface
uses Classes, SysUtils;

procedure XlsBeginStream(XlsStream:TStream; const BuildNumber:Word);
procedure XlsEndStream(XlsStream:TStream);
procedure XlsWriteCellRk(XlsStream:TStream; const ACol,ARow:Word; const AValue:Integer);
procedure XlsWriteCellNumber(XlsStream:TStream; const ACol,ARow:Word; const AValue:Double);
procedure XlsWriteCellLabel(XlsStream:TStream; const ACol,ARow:Word; const AValue:string);

implementation

const
CXlsBof:array[0..5] of word = ($809, 8, 00, $10, 0, 0);
CXlsEof:array[0..1] of word = ($0A, 00);
CXlsLabel:array[0..5] of word = ($204, 0, 0, 0, 0, 0);
CXlsNumber:array[0..4] of word = ($203, 14, 0, 0, 0);
CXlsRk:array[0..4] of word = ($27E, 10, 0, 0, 0);

procedure XlsBeginStream(XlsStream:TStream; const BuildNumber:Word);
begin
CXlsBof[4]:=BuildNumber;
XlsStream.WriteBuffer(CXlsBof,SizeOf(CXlsBof));
end;

procedure XlsEndStream(XlsStream:TStream);
begin
XlsStream.WriteBuffer(CXlsEof,SizeOf(CXlsEof));
end;
//целое число
procedure XlsWriteCellRk(XlsStream:TStream; const ACol,ARow:Word; const AValue:Integer);
var V:Integer;
begin
CXlsRk[2]:=ARow;
CXlsRk[3]:=ACol;
XlsStream.WriteBuffer(CXlsRk,SizeOf(CXlsRk));
V:=(AValue shl 2) or 2;
XlsStream.WriteBuffer(V,4);
end;
//число с плавающей точкой
procedure XlsWriteCellNumber(XlsStream:TStream; const ACol,ARow:Word; const AValue:Double);
begin
CXlsNumber[2]:=ARow;
CXlsNumber[3]:=ACol;
XlsStream.WriteBuffer(CXlsNumber,SizeOf(CXlsNumber));
XlsStream.WriteBuffer(AValue,8);
end;
//строка
procedure XlsWriteCellLabel(XlsStream:TStream; const ACol,ARow:Word; const AValue:string);
var L:Word;
begin
L:=Length(AValue);
CXlsLabel[1]:=8+L;
CXlsLabel[2]:=ARow;
CXlsLabel[3]:=ACol;
CXlsLabel[5]:=L;
XlsStream.WriteBuffer(CXlsLabel,SizeOf(CXlsLabel));
XlsStream.WriteBuffer(Pointer(AValue)^,L);
end;

end.
voltron
новенький
 
Сообщения: 64
Зарегистрирован: 06.07.2007 13:27:46
Откуда: Украина

Сообщение AMD » 05.02.2008 12:53:50

Ктото испытал это?

Сообщение укорочено, предупреждение за избыточное цитирование
AMD
постоялец
 
Сообщения: 189
Зарегистрирован: 23.01.2008 22:25:25
Откуда: Кишинев

Сообщение tria » 05.02.2008 13:36:02

Я под виндой пользуюсь такой штукой:
SM Software (C), 2000-2004
TXLSFile library v.3.1 and XLSExport components v.1.1
http://sm-software.com
У меня осталась их демо-версия, в которой нет ограничений на число ячеек.
На Делфи скомпилил ДЛЛ, через которую из Лазаря делаю выгрузку.
Пытался пообщаться с разработчиком на предмет перевода на Лазарус, предлагал свои услуги бесплатно - ответили, что это невозможно. Если кто обладает исходным кодом - было бы хорошо узнать, правда ли это.
Когда дойдут у меня руки до Линукса, планирую купить у них исходники и сделать ДЛЛ и SO, если это возможно.
Обидно будет купить и узнать, что таки это невозможно :)
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

Сообщение voltron » 05.02.2008 19:20:20

AMD писал(а):Ктото испытал это?

У меня работает, иначе бы не выкладывал. Конечно не без шероховатостей - все что не подходит под определение целого, строки или вещественного числа, этим модулем не выводится. Но это решаемо, можно выводить в качестве строки, а потом уже в экселе корректировать тип данных ячеек.
voltron
новенький
 
Сообщения: 64
Зарегистрирован: 06.07.2007 13:27:46
Откуда: Украина

Сообщение tria » 06.02.2008 11:20:24

Attid писал(а):поищи исходники на руборде =) чтоб зря не покупать =)

Искал, не нашел.
Мож искун из меня хреновый?:)
tria
постоялец
 
Сообщения: 401
Зарегистрирован: 03.04.2006 11:24:10

След.

Вернуться в Lazarus

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

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

Рейтинг@Mail.ru