ÐадеждниÑÑ Ð½Ð°Ñин за ÑÑздаване на ÑÑилизиÑан Excel оÑÑÐµÑ Ð¾Ñ Delphi е да Ñе запоÑне Ð¾Ñ ÑабоÑна книга, коÑÑо Ð´Ð¸Ð·Ð°Ð¹Ð½ÐµÑ Ð²ÐµÑе е изгÑадил. ÐÑкой Ð¾Ñ ÑинанÑÐ¾Ð²Ð¸Ñ Ð¾Ñдел оÑоÑÐ¼Ñ ÑакÑÑÑаÑа в Excel: логоÑо, заглавиÑÑа на колониÑе, гÑаниÑиÑе на облаÑÑÑа Ñ Ð´ÐµÑайли, ÑÐ´ÐµÐ±ÐµÐ»ÐµÐ½Ð¸Ñ Ñед за обÑи ÑÑми, ÑиÑловиÑе ÑоÑмаÑи за валÑÑа. ÐаÑиÑÑ ÐºÐ¾Ð´ оÑваÑÑ Ñози Ñайл, поÑÑÐ°Ð²Ñ Ñеални данни в клеÑкиÑе, коиÑо дизайнеÑÑÑ Ðµ ÑезеÑвиÑал за ÑелÑа, и запиÑва ÑезÑлÑаÑа. ÐÑнÑниÑÑ Ð²Ð¸Ð´ е ÑÐµÑ ÐµÐ½; ÑиÑлаÑа Ñа ваÑи. HotXLS, оÑигинална библиоÑека за Delphi и C++Builder, коÑÑо ÑеÑе и запиÑва XLS и XLSX ÑабоÑни книги без ÑпÑавление на Excel, ви дава ÑÑиÑе опеÑаÑии, Ð¾Ñ ÐºÐ¾Ð¸Ñо Ñе нÑждае Ñози Ð¿Ð¾Ð´Ñ Ð¾Ð´: ÑÑÑÑене на клеÑка по Ð½ÐµÐ¹Ð½Ð¸Ñ ÑекÑÑ, копиÑане на диапазон ÑÑÑ Ð·Ð°Ð¿Ð°Ð·ÐµÐ½Ð¸ ÑÑилове и ÑоÑмÑли, и вмÑкване на Ñедове, Ñака Ñе вÑиÑко оÑÐ´Ð¾Ð»Ñ Ð´Ð° Ñе измеÑÑи Ð½Ð°Ð´Ð¾Ð»Ñ Ñ Ð´Ð°Ð½Ð½Ð¸Ñе.
ÐдинÑÑвеноÑо пÑавило, коеÑо оÑлиÑава генеÑаÑоÑ, оÑелÑÐ²Ð°Ñ Ð¿Ñи ÑедакÑии на Ñаблона, Ð¾Ñ ÑакÑв, койÑо Ñе ÑÑива пÑи пÑÑваÑа пÑомÑна, е никога да не Ñе адÑеÑиÑÐ°Ñ ÐºÐ»ÐµÑки ÑÑез бÑквени номеÑа на Ñедове и колони. ШаблонÑÑ Ðµ докÑменÑ, койÑо дÑÑги Ñ Ð¾Ñа ÑедакÑиÑаÑ. ФинанÑовиÑÑ ÐµÐºÐ¸Ð¿ Ð´Ð¾Ð±Ð°Ð²Ñ Ñед за данÑк, ÑвелиÑава виÑоÑинаÑа на Ñеда Ñ Ð»Ð¾Ð³Ð¾Ñо, пÑенаÑежда адÑеÑÐ½Ð¸Ñ Ð±Ð»Ð¾Ðº, а ÑайловиÑÑ ÑоÑÐ¼Ð°Ñ Ð½Ðµ ви помага Ñ Ð½Ð¸Ñо: запиÑÑÑ Ð½Ð° BIFF или OOXML завÑÑÑва ÑÑпеÑно незавиÑимо дали Ñед 10 вÑе оÑе ознаÑава Ñова, коеÑо е ознаÑавал миналоÑо ÑÑимеÑеÑие. ÐенеÑаÑоÑ, койÑо запиÑва пÑÑÐ²Ð¸Ñ Ð´ÐµÑайлен Ñед на ÑвÑÑдо кодиÑан Ñед 10, пÑи пÑÑвоÑо вмÑкване на блок над ÑекÑиÑÑа Ñ Ð´ÐµÑайли Ñе пÑезапиÑе гÑеÑни клеÑки и Ñе ÑÑмиÑа диапазон за обÑи ÑÑми, койÑо веÑе не покÑива данниÑе. ÐиÑо не Ñ Ð²ÑÑÐ»Ñ Ð¸Ð·ÐºÐ»ÑÑениÑ, вÑеки Ð·Ð°Ð¿Ð¸Ñ Ð²ÑÑÑа ÑÑÐ¿ÐµÑ , а единÑÑвениÑÑ Ñигнал за пÑоблем е клиенÑÑÑ, забелÑзал гÑеÑна ÑакÑÑÑа.
ÐакоÑвÑне на вÑÑка кооÑдинаÑа кÑм плейÑÑ Ð¾Ð»Ð´ÑÑ Ñокен
РеÑениеÑо е ÑаблонÑÑ Ð´Ð° ноÑи Ñвои ÑобÑÑвени кооÑдинаÑи. ÐизайнеÑÑÑ Ð·Ð°Ð¿Ð¸Ñва Ñокени каÑо {{CUSTOMER}}, {{DATE}} и {{DETAIL_START}} в клеÑкиÑе, коиÑо генеÑаÑоÑÑÑ ÑÑÑбва да пÑомени, а генеÑаÑоÑÑÑ Ð¸Ð·ÑиÑлÑва вÑÑка позиÑÐ¸Ñ Ð² движение ÑпоÑед Ñова кÑде намиÑа Ñези Ñокени. РедакÑииÑе на оÑоÑмлениеÑо веÑе нÑÐ¼Ð°Ñ Ð·Ð½Ð°Ñение, ÑÑй каÑо ÑокенÑÑ Ñе меÑÑи заедно Ñ ÐºÐ»ÐµÑкаÑа, в коÑÑо Ñе намиÑа. ÐÑоÑаÑа ÑаÑÑ Ð¾Ñ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñа е пÑавилоÑо за неÑÑпеÑ
: ако липÑва задÑлжиÑелен Ñокен, задаÑаÑа ÑпиÑа, пÑеди каквиÑо и да било клиенÑÑки данни да доÑÑÐ¸Ð³Ð½Ð°Ñ Ð´Ð¾ Ñайла. Шаблон, койÑо Ñе е оÑклонил Ð¾Ñ ÑÑÑÑкÑÑÑаÑа Ñи, ÑÑÑбва да пÑоизведе ÑÐ¸ÐºÐµÑ Ð·Ð° неÑÑпеÑна задаÑа, а не доÑÑавен докÑменÑ.
ÐамиÑане на Ñокени: FindText и ReplaceText
РдвеÑе Ñамилии клаÑове на HotXLS Ð¸Ð·Ð»Ð°Ð³Ð°Ñ ÑÑÑÑене на ниво ÑабоÑен лиÑÑ. FindText вÑÑÑа Ñеда и колонаÑа на пÑÑваÑа клеÑка, ÑийÑо ÑекÑÑ ÑÑвпада, Ñ Ð¿ÑеÑоваÑване, коеÑо Ð´Ð¾Ð±Ð°Ð²Ñ ÑÑвÑÑвиÑелноÑÑ ÐºÑм ÑегиÑÑÑÑа. ReplaceText Ð·Ð°Ð¼ÐµÐ½Ñ Ð²ÑÑко ÑÑвпадение и вÑÑÑа бÑÐ¾Ñ Ð½Ð° пÑоменениÑе ÑÑвпадениÑ. ÐвеÑе ÑÑнкÑии покÑÐ¸Ð²Ð°Ñ Ð´Ð²Ð°Ñа вида Ñокени, коиÑо обикновено имаÑе. ÐдиниÑна коÑва каÑо имеÑо на клиенÑа Ñе локализиÑа веднÑж и Ñе запиÑва до неÑ; Ñокен, койÑо ÑÑÑбва да Ñе поÑви ÑоÑно веднÑж, каÑо даÑаÑа на оÑÑеÑа, Ñе Ð·Ð°Ð¼ÐµÐ½Ñ Ð¸ Ñе пÑовеÑÑва бÑоÑÑ Ð½Ð° замениÑе. ÐÑ ÑÑÑана на XLSX, попÑлване, коеÑо Ñе закоÑÐ²Ñ Ð¿Ð¾ Ñози наÑин, изглежда Ñака:
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
R, C: Integer;
begin
Book := TXLSXWorkbook.Create;
try
if Book.Open('invoice-template.xlsx') <> 1 then
raise Exception.Create('Cannot open invoice template');
Sheet := Book.Sheets[0]; // TXLSXSheets.Items is 0-based
if not Sheet.FindText('{{CUSTOMER}}', R, C) then
raise Exception.Create('Template drift: {{CUSTOMER}} anchor missing');
Sheet.Cells[R, C].Value := 'ACME Corp';
if Sheet.ReplaceText('{{DATE}}',
FormatDateTime('yyyy-mm-dd', Date)) = 0 then
raise Exception.Create('Template drift: {{DATE}} token missing');
// detail expansion and save follow below
finally
Book.Free;
end;
end;
Ðва деÑайла Ñа Ð¾Ñ Ð·Ð½Ð°Ñение. ÐÑÑво, FindText и ReplaceText ÑÑÐ²Ð¿Ð°Ð´Ð°Ñ Ñ ÑекÑÑоваÑа ÑÑойноÑÑ Ð½Ð° клеÑкаÑа; Ñокен, вгÑаден вÑÑÑе в низ Ñ ÑоÑмÑла, е невидим за ÑÑÑ
, Ñака Ñе плейÑÑ
олдÑÑиÑе ÑÑÑбва да бÑÐ´Ð°Ñ Ð² обикновени клеÑки, а не вÑв ÑоÑмÑли. ÐÑоÑо, бÑоÑÑ Ð½Ð° замениÑе е ваÑиÑÑ Ð´ÐµÑекÑÐ¾Ñ Ð·Ð° оÑклонение. Шаблон, койÑо ÑÑÑбва да ÑÑдÑÑжа ÑоÑно един Ñокен {{DATE}}, но оÑÑиÑа нÑла замени, е бил ÑедакÑиÑан, и повдиганеÑо на изклÑÑение в Ñози Ð¼Ð¾Ð¼ÐµÐ½Ñ Ðµ ÑоÑно Ñова, коеÑо пÑевÑÑÑа ÑиÑ
оÑо оÑклонение на оÑоÑмлениеÑо вÑв видим оÑказ.
ÐлониÑане на деÑÐ°Ð¹Ð»Ð½Ð¸Ñ Ñед без загÑба на ÑÑилове или ÑоÑмÑли
РазделÑÑ Ñ Ð´ÐµÑайли на ÑакÑÑÑаÑа ÑаÑÑе заедно Ñ Ð´Ð°Ð½Ð½Ð¸Ñе. ÐиÑанеÑо на ÑÑойноÑÑи диÑекÑно в пÑазни Ñедове под моÑÑÑаÑа изÑ
вÑÑÐ»Ñ Ð²ÑиÑко, коеÑо дизайнеÑÑÑ Ðµ подгоÑвил: гÑаниÑиÑе, ÑиÑловиÑе ÑоÑмаÑи, ÑоÑмÑлиÑе за вÑеки Ñед. ÐоделÑÑ, койÑо запазва вÑиÑко Ñова, е да Ñе оÑÑави един напÑлно ÑоÑмаÑиÑан Ñед-моÑÑÑа в Ñаблона и да Ñе клониÑа за вÑÑка позиÑиÑ. CopyRange дÑблиÑа ÑÑиловеÑе и ÑоÑмÑлиÑе Ñ ÐµÐ´Ð½Ð¾ извикване, Ñлед коеÑо генеÑаÑоÑÑÑ Ð¿ÑезапиÑва Ñамо клеÑкиÑе ÑÑÑ ÑÑойноÑÑи.
const
DetailRow = 10; // the formatted sample row in the template
var
I: Integer;
begin
// Open space before the totals block first, so the SUM range
// below the detail band stretches together with the data.
if Length(Items) > 1 then
Sheet.InsertRows(DetailRow + 1, Length(Items) - 1);
for I := 0 to High(Items) do
begin
if I > 0 then // clone styles + formulas from the sample row
Sheet.CopyRange(DetailRow, 1, DetailRow, 5, DetailRow + I, 1);
Sheet.Cells[DetailRow + I, 1].Value := Items[I].Name;
Sheet.Cells[DetailRow + I, 2].Value := Items[I].Qty;
Sheet.Cells[DetailRow + I, 3].Value := Items[I].UnitPrice;
Sheet.Cells[DetailRow + I, 4].Formula :=
Format('B%d*C%d', [DetailRow + I, DetailRow + I]); // no '=' prefix
end;
end;
СледеÑе внимаÑелно пÑиÑвоÑванеÑо на ÑоÑмÑли. СвойÑÑвоÑо Formula в XLSX пÑиема изÑаза без Ð²Ð¾Ð´ÐµÑ Ð·Ð½Ð°Ðº за ÑавенÑÑво, докаÑо XLS ÑаÑадаÑа оÑаква '=B10*C10', пÑиÑвоен пÑез Value. СмеÑванеÑо на двеÑе конвенÑии е най-ÑеÑÑаÑа гÑеÑка пÑи пÑенаÑÑне Ð¼ÐµÐ¶Ð´Ñ ÑамилииÑе клаÑове и Ñе пÑÐ¾Ð²Ð°Ð»Ñ Ð±ÐµÐ· оплакване: клеÑкаÑа пÑоÑÑо дÑÑжи бÑквален низ, койÑо Excel показва каÑо ÑекÑÑ. Ðко ÑаблонÑÑ ÑкÑаÑÑва деÑайлнаÑа облаÑÑ Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸ заглавни Ñедове, помнеÑе, Ñе Ñамо гоÑнаÑа лÑва клеÑка на обединенаÑа облаÑÑ ÑÑдÑÑжа ÑÑойноÑÑ. ÐÑавилаÑа за оÑоÑмление в пÑидÑÑжаваÑаÑа ÑÑаÑÐ¸Ñ Ð·Ð° обединени клеÑки в Ñаблони за оÑÑеÑи обÑÑнÑÐ²Ð°Ñ Ð·Ð°Ñо обединениÑе Ñегиони пÑÐ¸Ð½Ð°Ð´Ð»ÐµÐ¶Ð°Ñ Ð¸Ð·ÑÑло извÑн диапазона Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸.
Ðакво меÑÑи InsertRows и какво оÑÑÐ°Ð²Ñ Ð·Ð°Ð´ Ñебе Ñи
ÐмÑкванеÑо на Ñедове пÑед блока за обÑи ÑÑми е Ñова, коеÑо поддÑÑжа ÑазÑÑганеÑо на диапазона SUM Ñ Ð½Ð°ÑаÑÑванеÑо на деÑайлнаÑа ÑекÑиÑ. ÐÑ ÑÑÑана на XLSX, InsertRows пÑемеÑÑва дÑлÑг ÑпиÑÑк Ð¾Ñ Ð·Ð°Ð²Ð¸Ñими ÑÑÑÑкÑÑÑи Ð½Ð°Ð´Ð¾Ð»Ñ Ð·Ð°ÐµÐ´Ð½Ð¾ Ñ ÐºÐ»ÐµÑкиÑе: обединени диапазони, виÑоÑини на Ñедове, Ñ
ипеÑвÑÑзки, коменÑаÑи, замÑазени панели, диапазони на авÑоÑилÑÑи, ÑÑловни ÑоÑмаÑи, валидиÑане на данни, ÑаблиÑи, деÑиниÑани имена, и закоÑвÑÐ½Ð¸Ñ Ð½Ð° изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ диагÑами. Ð Ñози ÑпиÑÑк има една гÑаниÑа, коÑÑо Ñи ÑÑÑÑва да запомниÑе. ÐÑенапиÑванеÑо на ÑоÑмÑли заÑÑга Ñамо пÑепÑаÑки вÑÑÑе в ÑÑÑÐ¸Ñ Ð»Ð¸ÑÑ. ФоÑмÑла на обобÑÐ°Ð²Ð°Ñ Ð»Ð¸ÑÑ, коÑÑо ÑоÑи кÑм пÑемеÑÑÐµÐ½Ð¸Ñ Ñегион, запазва ÑÑаÑиÑе Ñи кооÑдинаÑи и ÑиÑ
о ÑеÑе гÑеÑни клеÑки, поÑади коеÑо обÑиÑе ÑÑми, извлеÑени Ð¼ÐµÐ¶Ð´Ñ Ð»Ð¸ÑÑове, Ñа по-безопаÑни, когаÑо Ñе изÑазÑÐ²Ð°Ñ ÑÑез имена на ниво ÑабоÑна книга. ÐÑидÑÑжаваÑаÑа ÑÑаÑÐ¸Ñ Ð·Ð° деÑиниÑани имена и ÑоÑмÑли Ð¼ÐµÐ¶Ð´Ñ Ð»Ð¸ÑÑове Ñазглежда Ñози модел.
ÐÑÑаÑелиÑÑ XLS ÑоÑÐ¼Ð°Ñ Ð¿Ð¾ÑÑÐ°Ð²Ñ Ð³ÑаниÑаÑа на по-неÑдобно мÑÑÑо. HotXLS ÑÑÑ ÑанÑва обобÑениÑе ÑаблиÑи (pivot tables), заÑвкиÑе за ÑаблиÑи и вÑнÑниÑе вÑÑзки кÑм данни в BIFF Ñайлове каÑо необÑабоÑени байÑови блокове. Те оÑелÑÐ²Ð°Ñ Ð¿Ñи оÑваÑÑне и Ð·Ð°Ð¿Ð¸Ñ Ð½ÐµÐ¿Ñоменени, но не Ñа моделиÑани, Ñака Ñе вмÑкванеÑо на Ñедове никога не ги заÑÑга. Шаблон, койÑо Ñазполага обобÑена ÑаблиÑа под ÑазÑиÑÑÐ²Ð°Ñ Ñе деÑайлен блок, Ñе запиÑва без никакво пÑедÑпÑеждение, докаÑо изÑоÑникÑÑ Ð½Ð° пивоÑа Ñе измеÑÑва Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸Ñе. РеÑениеÑо е ÑÑÑÑкÑÑÑно, а не заÑиÑно: дÑÑжÑе ÑÑдÑÑжаниеÑо на пивоÑа и заÑвкиÑе на лиÑÑове, в коиÑо генеÑаÑоÑÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð° не вмÑква Ñедове, и оÑÑаÑÑванеÑо на данниÑе нÑма да Ñе ÑлÑÑи.
ÐÑеизÑиÑлеÑе пÑеди доÑÑавка или знайÑе заÑо ÑÑе го пÑопÑÑнали
HotXLS не изÑиÑлÑва ÑоÑмÑлиÑе по вÑеме на SaveAs. ÐогаÑо Ñовек оÑвоÑи Ñайла, Excel пÑеизÑиÑлÑва вÑиÑко (ÑаÑадаÑа XLS излага CalculationMode и RecalcOnSave, ако ÑÑÑбва да ÑпÑавлÑваÑе Ñова), Ñака Ñе оÑÑеÑ, наÑоÑен кÑм поÑенÑка кÑÑÐ¸Ñ Ð½Ð° Ñовек, не изиÑква ниÑо повеÑе Ð¾Ñ Ð²Ð°Ñ. ÐаÑÑинаÑа Ñе пÑÐ¾Ð¼ÐµÐ½Ñ Ð² моменÑа, в койÑо ÑабоÑнаÑа книга заÑ
Ñанва дÑÑга пÑогÑама. ÐкÑпоÑÑиÑанеÑо в CSV запиÑва ÑоÑмÑлиÑе каÑо бÑквален ÑекÑÑ Ð¸ никога не ги изÑиÑлÑва, а вÑеки паÑÑÐµÑ Ð¿Ð¾ веÑигаÑа, койÑо Ñе довеÑÑва на кеÑиÑаниÑе ÑÑойноÑÑи, Ñе ÑеÑе оÑÑаÑели ÑиÑла или пÑазни полеÑа. Ðа Ñези пÑÑиÑа пÑавеÑе изÑиÑлениÑÑа на ÑÑÑвÑÑа Ñ Calculate, коеÑо оÑенÑва пÑоизволен изÑаз ÑпÑÑмо заÑеденаÑа ÑабоÑна книга и вÑÑÑа ÑезÑлÑаÑа:
var
Total: Variant;
LastDetail: Integer;
begin
LastDetail := DetailRow + Length(Items) - 1;
Total := Book.Calculate(Format('SUM(Invoice!D%d:D%d)',
[DetailRow, LastDetail]));
if (not VarIsNumeric(Total)) or
(Abs(Total - ExpectedTotal) > 0.005) then
raise Exception.Create('Invoice total does not match the order record');
if Book.SaveAs('invoice-2026-0611.xlsx') <> 1 then
raise Exception.Create('Save failed: check output path and permissions');
end;
ÐÑовеÑкаÑа на изÑиÑленаÑа ÑÑма ÑпÑÑмо запиÑа на поÑÑÑкаÑа пÑеди запиÑванеÑо е евÑина заÑÑÑÐ°Ñ Ð¾Ð²ÐºÐ° Ñ Ð´Ð¾Ð±Ñа вÑзвÑаÑаемоÑÑ. Ð¢Ñ Ð¿ÑевÑÑÑа погÑеÑнаÑа ÑакÑÑÑа в неÑÑпеÑна задаÑа. ÐпеÑаÑоÑÑÑ Ð¼Ð¾Ð¶Ðµ да ÑеÑÑаÑÑиÑа неÑÑпеÑна задаÑа за ÑекÑнди; ÑгÑеÑена ÑакÑÑÑа, коÑÑо веÑе е в поÑенÑкаÑа кÑÑÐ¸Ñ Ð½Ð° клиенÑа, коÑÑва на мениджÑÑа извинение и коÑекÑиÑ.
Ðве Ñамилии клаÑове, един алгоÑиÑÑм
Ðдна и ÑÑÑа логика Ñе пÑенаÑÑ Ð¼ÐµÐ¶Ð´Ñ ÑоÑмаÑиÑе, но не и ÑÑÑиÑÑ ÐºÐ¾Ð´. TXLSWorkbook за оÑÑаÑÐµÐ»Ð¸Ñ .xls е базиÑан на инÑеÑÑейÑи и е reference-counted, Ñ 1-базиÑано индекÑиÑане на лиÑÑове, и никога не го оÑвобождаваÑе ÑÑÑно. TXLSXWorkbook за .xlsx е обикновен обекÑ, койÑо ÑÑÑбва да оÑвободиÑе в try..finally, Ñ 0-базиÑано индекÑиÑане на лиÑÑове и ÑоÑмÑлнаÑа конвенÑиÑ, показана по-гоÑе. FindText, ReplaceText, CopyRange и InsertRows живеÑÑ Ð¸ Ð¾Ñ Ð´Ð²ÐµÑе ÑÑÑани, Ñака Ñе алгоÑиÑÑмÑÑ Ð·Ð° закоÑвÑне-клониÑане-пÑеизÑиÑлÑване Ñе пÑенаÑÑ ÑиÑÑо. ÐÑакÑиÑеÑкиÑÑ ÑÑÐ²ÐµÑ Ðµ да Ñе ангажиÑаÑе Ñ ÐµÐ´Ð¸Ð½ ÑоÑÐ¼Ð°Ñ Ð·Ð° вÑеки конвейеÑ, или да ÑкÑиеÑе дваÑа жизнени ÑикÑла на обекÑиÑе зад Ð²Ð°Ñ ÑÑнÑк адапÑеÑ, вмеÑÑо да ÑазпÑÑÑкваÑе ÑазликаÑа из ÑÐµÐ»Ð¸Ñ Ð³ÐµÐ½ÐµÑаÑоÑ.
РазмеÑÑÑ ÑÑдко е Ð¾Ñ Ð·Ð½Ð°Ñение за оÑÑеÑиÑе, коиÑо Ñози модел генеÑиÑа. ÐлониÑанеÑо на ÑÑилизиÑан Ñед нÑколко Ñ
илÑди пÑÑи е ниÑожно наÑоваÑване за ÑÑвÑÐµÐ¼ÐµÐ½Ð½Ð¸Ñ Ñ
аÑдÑеÑ. ÐÑÑÑÑ Ð½Ð° запиÑване ÑÑава ÑÑÑно мÑÑÑо едва когаÑо облаÑÑÑа Ñ Ð´ÐµÑайли доÑÑигне ÑеÑÑÑиÑÑен бÑой Ñедове, и в Ñози Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð°ÐºÑивиÑанеÑо на StreamingWrite изпÑаÑа XML на лиÑÑа диÑекÑно в изÑ
Ð¾Ð´Ð½Ð¸Ñ Ð¿Ð°ÐºÐµÑ, вмеÑÑо да го бÑÑеÑиÑа; ÑÑаÑиÑÑа за поÑоÑно запиÑване пÑи ÑÑÑвÑÑни пакеÑни задаÑи опиÑва кога Ñози компÑÐ¾Ð¼Ð¸Ñ Ñи ÑÑÑÑва. ÐиагÑамиÑе Ñе дÑÑÐ¶Ð°Ñ Ð¿Ð¾ ÑÑÑÐ¸Ñ Ð½Ð°Ñин, по койÑо и оÑÑаналаÑа ÑаÑÑ Ð¾Ñ Ð¾ÑоÑмлениеÑо: Ð¾Ñ ÑÑÑана на XLSX какÑо закоÑвÑнеÑо на диагÑамаÑа, Ñака и пÑепÑаÑкиÑе за ÑеÑиÑÑа Ñе пÑемеÑÑваÑ, когаÑо InsertRows Ñе изпÑлнÑва над ÑÑÑ
, Ñака Ñе диагÑама под Ñеда Ñ Ð¾Ð±ÑиÑе ÑÑми оÑÑава обвÑÑзана Ñ Ð¿ÑавилниÑе данни, докаÑо Ð¾Ñ ÑÑÑана на XLS диагÑамиÑе Ñе ÑÐ°Ð·Ð¿Ð¾Ð»Ð°Ð³Ð°Ñ Ð½Ð° ÑобÑÑвени лиÑÑове за диагÑами и, подобно на обобÑениÑе ÑаблиÑи, никога не Ñе измеÑÑваÑ. Това е оÑе един аÑгÑÐ¼ÐµÐ½Ñ Ð´Ð° дÑÑжиÑе пÑезенÑаÑионниÑе лиÑÑове Ð´Ð°Ð»ÐµÑ Ð¾Ñ Ð»Ð¸ÑÑа, койÑо генеÑаÑоÑÑÑ ÑазÑиÑÑва.
Този Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ñ ÐºÐ¾Ñва-клониÑане-пÑеизÑиÑлÑване позволÑва на дизайнеÑа да пÑиÑежава наÑина, по койÑо изглежда ÑабоÑнаÑа книга, докаÑо ваÑиÑÑ ÐºÐ¾Ð´ пÑиÑежава Ñова, коеÑо ÑÑ ÐºÐ°Ð·Ð²Ð°, коеÑо обикновено пÑави генеÑиÑÐ°Ð½Ð¸Ñ Ð¸Ð·Ñ Ð¾Ð´ Ð¾Ñ Excel леÑен за поддÑÑжка. ТÑÑÑенеÑо, копиÑанеÑо и вмÑкванеÑо на Ñедове, пÑедÑÑавени ÑÑк, заедно Ñ Ð¸Ð·ÑиÑлиÑÐµÐ»Ð½Ð¸Ñ Ð´Ð²Ð¸Ð³Ð°Ñел, използван за пÑовеÑкаÑа на обÑиÑе ÑÑми пÑеди доÑÑавка, Ñе доÑÑавÑÑ Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа HotXLS за Delphi и C++Builder.