fpspreadsheet-1.1 ограничение размера записи?

Вопросы использования сторонних (не входящих в состав FPC и Lazarus) утилит и библиотек.

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

fpspreadsheet-1.1 ограничение размера записи?

Сообщение vitaly_l » 17.03.2014 00:52:45

Всем привет,

fpspreadsheet-1.1 - экспортирует в xls (sfExcel8) всё хорошо...
Было 111 111 строк... но fpspreadsheet экспортировал 38 394...
При этом цикл экспорта дошёл до 111 111 строки... exception не было...

Попробовал 10 000 строк - нормально...
Попробовал 20 000 строк - нормально...
Попробовал 30 000 строк - нормально...
Попробовал 40 000 строк - но fpspreadsheet - записал только 38 390......

Сократил длину вводимого текста в строках базы данных...
угадал в fpspreadsheet существует ограничение по размеру...


Попробовал 40 000 укороченных строк - нормально...
Попробовал 50 000 укороченных строк - нормально...
Попробовал 60 000 укороченных строк - fpspreadsheet создал битый файл...

:?: Как увеличить размер файла? или Stream? или не знаю чего,
:arrow: чтобы можно было записывать файлы xls большого размера?


Спасите помогите - вымираю как последний динозавр... :cry:


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение SSerge » 17.03.2014 04:50:48

vitaly_l
У экселей вообще-то у самих существует ограничение по количеству ячеек в таблице. У 97-го она как раз 32600 где-то и составляет.
В коем-то году был грандиозный прорыв, когда этот порог сняли; но отодвинули до другой границы. Но то, что сняли порог, еще не значит, что электронная таблица способна адекватно обрабатывать такой объем записей. А потому не надо загружать софт несвойственными ему функциями. Таблицы не предназначены для такого количества записей. Нужно посмотреть содержимое ячеек - так никто не мешает сформировать _несколько_ файлов с размером, гарантированно записывающимся/читающимся. Еще есть, кстати, формат .CSV. Разделяете поля табулятором или точкой с запятой и вперед с песнями. Куда прозрачнее, чем пользоваться чем-то непонятно как работающим.
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение vitaly_l » 17.03.2014 10:42:47

SSerge писал(а):У экселей вообще-то у самих существует ограничение по количеству ячеек в таблице. У 97-го она как раз 32600


Нет,
это именно fpspreadsheet-1.1 - обрезает записи больше определённого размера.
Возможно кто-то сталкивался и знает: Как отключить обрезание в fpspreadsheet-1.1?


.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение SSerge » 17.03.2014 12:30:27

Однако, http://office.microsoft.com/ru-ru/excel ... 73849.aspx
Подсказываю, если вы где то превысите эти ограничения, оставшеюся информацию файла excel вправе проигнорировать, а fpspreadsheet эти параметры может не контролировать вообще

Добавлено спустя 12 минут 40 секунд:
У excel 2003 - еще смешнее: http://office.microsoft.com/ru-ru/excel ... 99291.aspx
SSerge
энтузиаст
 
Сообщения: 971
Зарегистрирован: 12.01.2012 05:34:14
Откуда: Барнаул

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение vitaly_l » 17.03.2014 13:06:36

SSerge писал(а):У excel 2003 - еще смешнее


Я видел этот ужас, глумления над населением планеты.
Сделал CSV (спасибо, Вы правы это проще).

Однако: "Возможно кто-то сталкивался и знает: Как отключить обрезание в fpspreadsheet-1.1?"



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение alexs » 17.03.2014 23:40:49

А как оно там в исходниках реализовано? Не смотрели?
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение vitaly_l » 18.03.2014 15:24:56

Да смотрел, я не могу найти ошибку. Вроде всё правильно.
Ограничений по размеру нет, вот функция добавления:

Код: Выделить всё
procedure TsWorksheet.WriteUTF8Text(ARow, ACol: Cardinal; AText: ansistring);
var
  ACell: PCell;
begin
  ACell := GetCell(ARow, ACol);

  ACell^.ContentType := cctUTF8String;
  ACell^.UTF8StringValue := AText;
end;
//************************************************************************
function TsWorksheet.GetCell(ARow, ACol: Cardinal): PCell;
begin
  Result := FindCell(ARow, ACol);
 
  if (Result = nil) then
  begin
    Result := GetMem(SizeOf(TCell)); // TCell - это record с множеством переменных
    FillChar(Result^, SizeOf(TCell), #0);

    Result^.Row := ARow;
    Result^.Col := ACol;

    Cells.Add(Result);
  end;
end; 
//************************************************************************
function TAVLTree.Add(Data: Pointer): TAVLTreeNode;
begin // это вызывается при обращении Cells.Add(Result); из GetCell
  Result:=fNodeMgr.NewNode;
  Result.Data:=Data;
  Add(Result); // ссылается на саму себя
end; 
//************************************************************************
// далее функции записи всей таблицы
//************************************************************************
procedure TsWorkbook.WriteToFile(const AFileName: string;
const AFormat: TsSpreadsheetFormat; const AOverwriteExisting: Boolean = False);
var
  AWriter: TsCustomSpreadWriter;
begin
  AWriter := CreateSpreadWriter(AFormat);

  try
    AWriter.WriteToFile(AFileName, Self, AOverwriteExisting);
  finally
    AWriter.Free;
  end;
end; 
//************************************************************************
procedure TsCustomSpreadWriter.WriteToFile(const AFileName: string;
  AData: TsWorkbook; const AOverwriteExisting: Boolean = False);
var
  OutputFile: TFileStream;
  lMode: Word;
begin
  if AOverwriteExisting then lMode := fmCreate or fmOpenWrite
  else lMode := fmCreate;

  OutputFile := TFileStream.Create(AFileName, lMode);
  try
    WriteToStream(OutputFile, AData);
  finally
    OutputFile.Free;
  end;
end;     



В общем: я не вижу в коде ошибки или ограничений по размеру.



.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение alexs » 19.03.2014 19:58:31

я думаю - надо смотреть в конкретном экзеипляре объекта AWriter
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4053
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: fpspreadsheet-1.1 ограничение размера записи?

Сообщение vitaly_l » 19.03.2014 20:58:50

.

Alexs, забейте, хрен с ним с этим багом. Я уже переправил под CSV, в CSV - всё работает.
Возможно, что это и не баг вовсе, и SSerge прав, т.к. в Excel действительно есть ограничения.
Возможно что - это не в fpspreadsheet дело, а в офисе и excel (хотя CSV большой офис загрузил).
Спасибо.

.
Аватара пользователя
vitaly_l
долгожитель
 
Сообщения: 3333
Зарегистрирован: 31.01.2012 16:41:41


Вернуться в Сторонние средства

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

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

Рейтинг@Mail.ru