Кто-нибудь подключал fpspreadsheet?
WIN XP.
Все попытки что-то сделать упираются в то, что я не могу ни открыть файл (любого типа), ни записать созданный (из примера на - http://wiki.freepascal.org/FPSpreadsheet/ru)
Примером может кто-нибудь порадовать?
fpspreadsheet
Модератор: Модераторы
fpspreadsheet
Последний раз редактировалось sign 06.09.2011 18:48:27, всего редактировалось 2 раза.
sign писал(а):ни открыть файл (любого типа), ни записать созданный
А какие, при этом, ошибки выдаются?
Код: Выделить всё
procedure TDM.LoadOrder(const aFileName: String);
var WB: TsWorkbook;
WH: TsWorksheet;
begin
WB := TsWorkbook.Create;
try
SetLength(GsSpreadFormats, 1);
GsSpreadFormats[0].Format := sfOpenDocument;
WB.ReadFromFile(aFileName, sfOpenDocument);
finally
WB.Free;
end;
end;
В процедуре WB.ReadFromFile(aFileName, sfOpenDocument);
Код: Выделить всё
procedure TsWorkbook.ReadFromFile(AFileName: string;
AFormat: TsSpreadsheetFormat);
var
AReader: TsCustomSpreadReader;
begin
AReader := CreateSpreadReader(AFormat);
try
AReader.ReadFromFile(AFileName, Self);
finally
AReader.Free;
end;
end;На создании AReader := CreateSpreadReader(AFormat);
Код: Выделить всё
function TsWorkbook.CreateSpreadReader(AFormat: TsSpreadsheetFormat): TsCustomSpreadReader;
var
i: Integer;
begin
Result := nil;
for i := 0 to Length(GsSpreadFormats) - 1 do
if GsSpreadFormats[i].Format = AFormat then
begin
Result := GsSpreadFormats[i].ReaderClass.Create;
Break;
end;
if Result = nil then raise Exception.Create(lpUnsupportedReadFormat);
end;
Строка Result := GsSpreadFormats[i].ReaderClass.Create;
Возвращает nil.
Соответственно срабатывае Exception.
alexs писал(а):Модуль fpsallformats.pas или один из (в зависимости от типа файла) xlsbiff2, xlsbiff5, xlsbiff8, fpsopendocument, xlsxooxml не забыл подключить?
О, блин!
Я это упустил, а в примере же все модули указаны!
Большое, большое спасибо!
Обнаружил проблему.
Если текст окрашен, то он не читается.
В прилагаемом документе нужно считывать только те строки, где указано кол-во заказанного.
Последняя нормально читаемая строка - 184.
Следующая с указанным кол-вом (колонка H) - 264.
Текстовая ячейка B264, окрашена и при её чтении посредством WH.GetCell(P.Row, x1)^.UTF8StringValue, обнаруживается следующее: в вызываемой функции GetCell используется функция FindCell, для поиска ячейки указанных координат. Эта функция окрашенную ячейку не находит и возвращает nil.
Если текст сохранить как ods, тогда да, всё читает (правда в 100 раз медленней), но блин, это ж морока, всякий раз это делать.
И что делать?
Если текст окрашен, то он не читается.
В прилагаемом документе нужно считывать только те строки, где указано кол-во заказанного.
Последняя нормально читаемая строка - 184.
Следующая с указанным кол-вом (колонка H) - 264.
Текстовая ячейка B264, окрашена и при её чтении посредством WH.GetCell(P.Row, x1)^.UTF8StringValue, обнаруживается следующее: в вызываемой функции GetCell используется функция FindCell, для поиска ячейки указанных координат. Эта функция окрашенную ячейку не находит и возвращает nil.
Если текст сохранить как ods, тогда да, всё читает (правда в 100 раз медленней), но блин, это ж морока, всякий раз это делать.
И что делать?
А в ответ тишина.
Кстати, обнаружил, что этот модуль просто не умет читать ёксельные файлы.
В моём примере просто совпало, другой цвет.
Взял другую таблицу - чтение ломается.
Кстати, обнаружил, что этот модуль просто не умет читать ёксельные файлы.
В моём примере просто совпало, другой цвет.
Взял другую таблицу - чтение ломается.
