victor_r
Newbie | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Цитата: victor r больше 64К и без установленного Ms Excel умеет компонент NativeExcel (есть в копилке), но он обрабатывает все в виде массивов в оперативе, то бишь если большая таблица и мало оперативы - сожрет всю оперативу и вылетит с ошибкой по нехватке памяти. Однако ничего не мешает Вам его попробывать | Так вот привожу кусок кода которым формирую таблицу на осн. датасета Код: var XF : IXLSWorkbook; Sheet0 : IXLSWorksheet; i, j, l : integer; begin if not MasterDataSet.Active then MasterDataSet.Open; MasterDataSet.First; XF := TXLSWorkbook.Create; // Сколько полей l := 0; for i := 0 to MasterDataSet.FieldCount - 1 do begin inc(l); SetLength(FieldExport, l); FieldExport[l-1].fName := MasterDataSet.Fields[l-1].DisplayName; FieldExport[l-1].fType := MasterDataSet.Fields[l-1].DataType; FieldExport[l-1].fSize := MasterDataSet.Fields[l-1].DisplayWidth; end; Sheet0 := XF.Sheets.Add; Sheet0.Name := 'Лист 1'; with Sheet0 do begin while not MasterDataSet.Eof do begin for i := 0 to l-1 do begin Cells.Item[1, i + 1].Borders.LineStyle := xlContinuous; Cells.Item[1, i + 1].Value := FieldExport[i].fName; end; inc(cnt); for i := 0 to l-1 do begin Cells[cnt, i + 1].Borders.LineStyle := xlContinuous; case FieldExport[i].fType of ftSmallint, ftInteger, ftWord : Cells[cnt, i + 1].Value := MasterDataSet.Fields[i].AsInteger; ftFloat, ftBCD : Cells[cnt, i + 1].Value := MasterDataSet.Fields[i].AsFloat; ftCurrency : Cells[cnt, i + 1].Value := MasterDataSet.Fields[i].AsCurrency; ftDate, ftTime, ftDateTime: begin if (not MasterDataSet.Fields[i].IsNull) and (MasterDataSet.Fields[i].AsDateTime <> 0) then Cells[cnt, i + 1].Value := MasterDataSet.Fields[i].AsDateTime; end; else Cells[cnt, i + 1].Value := MasterDataSet.Fields[i].AsString; end; end; MasterDataSet.Next; end; end; XF.SaveAs(EdPath.Text); end; | Выполняю на XP-SP3, ОЗУ 3,5Гб, свободного места на диске 4Гб, кол-во записей в таблице 86000. Не вылетает, а просто пишет последние 65536 строк съедая начало. Если есть варианты как сделать больше в NativeExcel, буду рад увидеть примеры. PS. До сих пор не могу получить ответа на регистрацию в копилке, кого нужно на коленях умолять сделать доступ? Добавлено: Вдогон предыдущему посту добавляю. Пробовал виз. компонентом NativeExcel TDataset2Excel Код: Dataset2Excel1.Dataset := MasterDataSet; Dataset2Excel1.RowsPerSheet := 1048576; Dataset2Excel1.SaveDatasetAs(EdPath.Text); Exit; | Несмотря на значение параметра RowsPerSheet бьет закладками по 65536 строк. А какому бухгалтеру объяснишь что вам нужно помнить что у него теперь несколько закладок нужно смотреть и суммировать оказывается не так просто. Хотя я именно так и выкрутился. Только я бью на страницы вручную оставляя одну строку для "итого". А сам теперь сижу и жду нового приключения :-\ |