ÐбÑ
одеÑе клеÑкиÑе на ÑокÑ-Ñо оÑвоÑен Ñаблон за оÑÑÐµÑ Ð¸ обединеноÑо заглавие Ñе Ñе дÑÑжи каÑо ÑеÑ. Ðие ÑеÑеÑе A1 и полÑÑаваÑе "Quarterly Statement"; ÑеÑеÑе Ð¾Ñ B1 до F1, коиÑо видимо Ñе намиÑÐ°Ñ Ð¿Ð¾Ð´ ÑÑÑÐ¸Ñ Ð±Ð°Ð½ÐµÑ, и не полÑÑаваÑе ниÑо. ÐапиÑеÑе ÑÑойноÑÑ Ð² C1, за да коÑигиÑаÑе заглавнаÑа ÑаÑÑ, и ÑÑ Ð½Ð¸ÐºÐ¾Ð³Ð° нÑма да Ñе поÑви на екÑана. ÐÑежаÑа не е загÑбила ваÑиÑе данни. Ð¢Ñ Ð¿Ñави ÑоÑно Ñова, коеÑо ознаÑава обединÑванеÑо: какÑо в XLS, Ñака и в XLSX, обединениÑÑ Ð¿ÑавоÑгÑлник визÑализиÑа ÑÑдÑÑжаниеÑо на една клеÑка (гоÑнаÑа лÑва закоÑвена клеÑка - anchor) и ÑÑеÑиÑа оÑÑаналиÑе каÑо покÑиÑо пÑоÑÑÑанÑÑво, коеÑо ÑÑдÑÑжа ÑÑойноÑÑи, но никога не ги показва. ÐоÑÑебиÑелиÑе на Excel наÑÑÐ°Ð²Ð°Ñ Ñова по меÑода на пÑобаÑа и гÑеÑкаÑа. ÐенеÑаÑоÑÑÑ Ð½Ð° оÑÑеÑи ÑÑÑбва да го кодиÑа каÑо пÑавило, ÑÑй каÑо в генеÑиÑÐ°Ð½Ð¸Ñ ÐºÐ¾Ð´ ÑимпÑомÑÑ Ðµ пÑазна облаÑÑ Ð±ÐµÐ· изклÑÑение, по коеÑо да бÑде пÑоÑледен. HotXLS, оÑигинална Object Pascal библиоÑека, коÑÑо ÑеÑе и запиÑва и дваÑа ÑоÑмаÑа на Excel Ð¾Ñ Delphi и C++Builder, извежда ÑаблиÑаÑа на обединÑваниÑÑа доÑÑаÑÑÑно ÑÑно, за да можеÑе да пÑогÑамиÑаÑе ÑпоÑед Ñова пÑавило, вмеÑÑо да го оÑкÑиваÑе оÑново ÑÑез ÑÐ¸ÐºÐµÑ Ð·Ð° поддÑÑжка.
Ðдна ÑÑойноÑÑ, едно закоÑвÑне
ÐбединÑванеÑо е инÑÑÑÑкÑÐ¸Ñ Ð·Ð° показване, наÑложена вÑÑÑ Ñ Ð¼Ñежа, коÑÑо не пÑÐ¾Ð¼ÐµÐ½Ñ ÑоÑмаÑа Ñи. ÐÑÑка покÑиÑа клеÑка вÑе оÑе ÑÑÑеÑÑвÑва вÑв Ñайла каÑо ÑобÑÑвено гнездо; запиÑÑÑ Ð·Ð° обединÑване Ñамо казва на конÑÑмаÑоÑа да изÑиÑÑва ÑÑдÑÑжаниеÑо на закоÑвенаÑа клеÑка вÑÑÑ Ñ ÑÐµÐ»Ð¸Ñ Ð¿ÑавоÑгÑлник. Тази Ñазлика опÑÐµÐ´ÐµÐ»Ñ ÑÑи поведениÑ, коиÑо Ñи ÑÑÑÑва да ÑÑвоиÑе, пÑеди да пиÑеÑе код за оÑоÑмление. ЧеÑенеÑо на покÑиÑа клеÑка вÑÑÑа нейнаÑа ÑобÑÑвена ÑÑÑ Ñанена ÑÑойноÑÑ, коÑÑо за банеÑ, койÑо ÑÑе ÑÑздали, обикновено е пÑазна, Ñака Ñе вÑеки код, койÑо инÑпекÑиÑа обединено заглавие, ÑÑÑбва да намеÑи и пÑоÑеÑе закоÑвенаÑа клеÑка. ÐапиÑванеÑо в покÑиÑа клеÑка завÑÑÑва ÑÑпеÑно на ниво Ñайл и не Ñе показва никÑде, коеÑо е капанÑÑ Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¾Ñо заглавие Ð¾Ñ Ð½Ð°ÑалоÑо на ÑÑаÑиÑÑа. Ð ÑазединÑванеÑо на Ñегион ÑазкÑива вÑиÑко, коеÑо е било под него пÑез ÑÑлоÑо вÑеме, Ñака Ñе ÑлÑÑайна ÑÑойноÑÑ, запиÑана в покÑиÑоÑо пÑоÑÑÑанÑÑво, Ñе пÑевÑÑÑа вÑв видим деÑÐµÐºÑ Ð² денÑ, в койÑо нÑкой Ñазвали обединÑванеÑо.
ÐÑ ÑÑÑана на XLSX Ñази ÑаблиÑа е Ð¾Ð±ÐµÐºÑ Ð¾Ñ Ð¿ÑÑви клаÑ. Sheet.MergedCells ÑÑдÑÑжа Add('A1:C1'), FindAt(Row, Col), DeleteAt и Items, каÑо извикванеÑо, кÑм коеÑо поÑÑгаÑе най-ÑеÑÑо, е FindAt: подайÑе Ð¼Ñ Ð¿Ñоизволна кооÑдинаÑа и Ñо Ñе вÑÑне Ð¾Ð±ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñ Ñегион, покÑÐ¸Ð²Ð°Ñ Ñази клеÑка, или nil, когаÑо клеÑкаÑа е ÑамоÑÑоÑÑелна. Това единиÑно ÑÑÑÑене е в оÑноваÑа на двеÑе ÑаÑÑи за пÑавилно ÑпÑавление на обединÑванеÑо: безопаÑноÑо ÑеÑене и заÑиÑаÑа пÑи запиÑ, и двеÑе Ð¾Ñ ÐºÐ¾Ð¸Ñо Ñе Ñазгледаме по-наÑаÑÑк.
Ðве ÑаÑади, два идиома за обединÑване
HotXLS поддÑÑжа клаÑиÑеÑÐºÐ¸Ñ BIFF8 .xls двигаÑел и OOXML .xlsx двигаÑÐµÐ»Ñ ÐºÐ°Ñо оÑделни обекÑни модели и Ñе опиÑÐ²Ð°Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÑванеÑо по ÑазлиÑен наÑин, ÑÑй каÑо пÑÐ¾Ð¸Ð·Ð»Ð¸Ð·Ð°Ñ Ð¾Ñ ÑазлиÑни конвенÑии. ФаÑадаÑа XLS Ñледва Excel COM идиома: вземаÑе диапазон Ð¾Ñ Ð´Ð¸Ð°Ð¿Ð°Ð·Ð¾Ð½Ð½Ð¾ ÑвойÑÑво Ñ Ð´Ð²Ð° аÑгÑменÑа и извикваÑе Merge Ñ OleVariant, ÑиÑÑо ÑÑойноÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»Ñ Ð³ÐµÐ¾Ð¼ÐµÑÑиÑÑа, коÑÑо полÑÑаваÑе.
var
Book: IXLSWorkbook; // interface-counted: no manual Free
Sh: IXLSWorksheet;
begin
Book := TXLSWorkbook.Create;
Sh := Book.Sheets[1]; // XLS sheet collection is 1-based
Sh.Range['A1', 'F1'].Merge(False); // False = one merged block
Sh.Cells.Item[1, 1].Value := 'Quarterly Statement';
Sh.Range['A3', 'F4'].Merge(True); // True = merge across: one merge per row
Book.SaveAs('layout.xls');
end;
ÐÑгÑменÑÑÑ Ð½Ð° Merge е ÑаÑÑÑа, коÑÑо Ñ
оÑаÑа бÑÑкаÑ. Рдиапазон Ð¾Ñ Ð´Ð²Ð° Ñеда, Merge(True) пÑоизвежда две незавиÑими обединÑÐ²Ð°Ð½Ð¸Ñ Ð¾Ñ Ð¿Ð¾ един Ñед, коеÑо е ÑÑнкÑионалноÑÑÑа "Merge Across" на Excel и е ÑоÑно Ñова, коеÑо иÑкаÑе за подÑедена заглавна ленÑа, ÑииÑо Ñедове ÑÑÑбва да оÑÑÐ°Ð½Ð°Ñ Ñазделими. Merge(False) Ñлива ÑÐµÐ»Ð¸Ñ Ð¿ÑавоÑгÑлник в един блок. ÐиапазонÑÑ ÑÑÑо Ñака оÑÑиÑа MergeCells каÑо Ñлаг за ÑÑÑÑоÑние, вÑÑÑа ÑÑдÑÑжаÑÐ¸Ñ Ð³Ð¾ Ñегион ÑÑез MergeArea и Ñе ÑазединÑва Ñ Unmerge. ФаÑадаÑа XLSX излага ÑÑÑиÑе опеÑаÑии под дÑÑги имена: Sheet.MergeCells(Row1, Col1, Row2, Col2) пÑиема ÑелоÑиÑлени гÑаниÑи, TXLSXRange.Merge пÑиема еквиваленÑÐ½Ð¸Ñ Ð²Ð°ÑÐ¸Ð°Ð½Ñ Across, а колекÑиÑÑа MergedCells ÑÑдÑÑжа ÑезÑлÑаÑа.
Шаблон, койÑо ÑаÑÑе заедно Ñ Ð´Ð°Ð½Ð½Ð¸Ñе Ñи
РеалниÑÑ Ñаблон за оÑÑÐµÑ Ð½Ðµ е ÑикÑиÑана мÑежа. ÐаглавнаÑа ÑаÑÑ Ð¸ обÑиÑе ÑÑми Ñа ÑикÑиÑани, но ÑазделÑÑ Ñ Ð´ÐµÑайли Ð¼ÐµÐ¶Ð´Ñ ÑÑÑ Ñе ÑазÑÑга ÑпоÑед ÑезÑлÑаÑиÑе Ð¾Ñ Ð·Ð°ÑвкаÑа. ÐоделÑÑ, койÑо ÑабоÑи ÑÑпеÑно, запазва един напÑлно ÑÑилизиÑан Ñед за деÑайли в Ñаблона, клониÑа го по веднÑж за вÑеки Ð·Ð°Ð¿Ð¸Ñ Ð¸ Ñлед Ñова оÑваÑÑ Ð¿Ñазно пÑоÑÑÑанÑÑво пÑеди блока Ñ Ð¾Ð±ÑиÑе ÑÑми, Ñака Ñе вÑиÑко, закоÑвено оÑдолÑ, да Ñе плÑзне надолÑ, без да гÑби ÑоÑмаÑиÑанеÑо Ñи.
Sheet.Range['A1:F1'].Merge;
Sheet.Cells[1, 1].Value := 'INVOICE #2026-0611'; // value goes to the anchor, A1
Sheet.RowHeight[1] := 28;
TitleFont := Book.Fonts.Add('Calibri', 16, True, False);
Sheet.Cells[1, 1].FontIndex := TitleFont + 1; // pool index 0-based, cell side 1-based
// row 5 is the styled detail template line
for I := 0 to ItemCount - 1 do
Sheet.CopyRange(5, 1, 5, 6, 6 + I, 1); // styles and formulas travel with it
// open a gap above the totals block; content below shifts down
Sheet.InsertRows(6 + ItemCount, 1);
Sheet.Range['A1:F1'].SetBorders(xlsxEdgeOutline, xlsxBorderMedium);
Ðва Ñеда заÑлÑÐ¶Ð°Ð²Ð°Ñ Ð²ÑоÑи поглед. ÐÑиÑвоÑванеÑо на ÑÑиÑÑ ÑÑдÑÑжа Ñазлика Ñ ÐµÐ´Ð¸Ð½Ð¸Ñа (off-by-one), коÑÑо може неÑÑеÑно да ви изненада: Fonts.Add вÑÑÑа 0-базиÑана позиÑÐ¸Ñ Ð² пÑла, докаÑо клеÑкаÑа ÑÑÑ
ÑанÑва 1-базиÑана пÑепÑаÑка кÑм ÑÑиÑÑ, кÑдеÑо 0 ознаÑава ÑÑиÑÑа по подÑазбиÑане, Ñака Ñе изпÑÑканеÑо на + 1 не пÑедизвиква гÑеÑка, а пÑоÑÑо ÑоÑмаÑиÑа заглавиеÑо Ñ Ð³ÑеÑен ÑÑиÑÑ. ÐÑÑгиÑÑ Ñед е CopyRange, койÑо пÑемеÑÑва ÑоÑмаÑиÑанеÑо и ÑоÑмÑлиÑе заедно ÑÑÑ ÑÑойноÑÑиÑе. Това е ÑÑлаÑа пÑиÑина да Ñе клониÑа ÑÑÑно ÑÑздаден Ñед Ð¾Ñ Ñаблон, вмеÑÑо да Ñе вÑзÑÑановÑва неговиÑÑ Ð¸Ð·Ð³Ð»ÐµÐ´ в кода. ÐизайнеÑÑÑ Ð¾Ð¿ÑÐµÐ´ÐµÐ»Ñ Ð²ÑнÑÐ½Ð¸Ñ Ð²Ð¸Ð´ веднÑж, в Ñаблона; генеÑаÑоÑÑÑ Ñамо излива данни в ÐºÐ¾Ð¿Ð¸Ñ Ð¾Ñ Ð½ÐµÐ³Ð¾.
Това Ñазделение Ñе маÑабиÑа допÑлниÑелно, когаÑо ÑаблоноÑо оÑоÑмление живее в ÑобÑÑвена ÑабоÑна книга, напÑÐ¸Ð¼ÐµÑ Ð»Ð¸ÑÑ ÑÑÑ Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð¸ и долни колонÑиÑÑли, ÑподелÑни Ð¼ÐµÐ¶Ð´Ñ Ð¾ÑÑеÑиÑе. CopyRangeTo извÑÑÑва ÑÑÑоÑо клониÑане пÑез гÑаниÑиÑе на ÑабоÑниÑе лиÑÑове, пÑиемайки ÑÐµÐ»ÐµÐ²Ð¸Ñ Ð»Ð¸ÑÑ Ð¿Ð»ÑÑ ÐºÐ¾Ð¾ÑдинаÑиÑе на меÑÑоназнаÑениеÑо, Ñака Ñе генеÑаÑоÑÑÑ Ð¼Ð¾Ð¶Ðµ да поддÑÑжа един ÑиÑÑ Ñаблон и да копиÑа неговиÑе Ñегиони в Ñолкова изÑ
одни лиÑÑове, колкоÑо Ñа необÑ
одими за задаÑаÑа. ÐлÑеÑнаÑиваÑа, да пÑоменÑÑе Ñаблона на мÑÑÑо и да Ñе опиÑваÑе да го вÑзÑÑановиÑе Ñлед Ñова, е Ð¾Ñ Ð½ÐµÑаÑа, коиÑо ÑабоÑÑÑ Ð´Ð¾ денÑ, в койÑо пÑоÑеÑÑÑ Ñе пÑекÑÑне наполовина.
Ðакво пÑемеÑÑва InsertRows и какво не
ÐоделÑÑ Ñ ÑазÑаÑÑÐ²Ð°Ñ Ñе Ñаблон ÑабоÑи Ñамо заÑоÑо InsertRows в XLSX е ÑÑÑÑкÑÑÑна ÑедакÑиÑ, а не пÑоÑÑо ÑазмеÑÑване на клеÑки. ÐогаÑо оÑваÑÑ Ð¿Ñазнина, Ñой ÑелокиÑа обединениÑе Ñегиони, виÑоÑиниÑе на ÑедовеÑе, Ñ
ипеÑвÑÑзкиÑе, коменÑаÑиÑе, замÑазениÑе панели, диапазониÑе на авÑоÑилÑÑиÑе, ÑÑловниÑе ÑоÑмаÑи, валидиÑанеÑо на данни, ÑаблиÑиÑе, деÑиниÑаниÑе имена, закоÑвÑниÑÑа на изобÑÐ°Ð¶ÐµÐ½Ð¸Ñ Ð¸ диагÑами, коиÑо Ñе намиÑÐ°Ñ Ð¿Ð¾Ð´ ÑоÑкаÑа на вмÑкване, а не Ñамо ÑÑойноÑÑиÑе на клеÑкиÑе. Това позволÑва на блока Ñ Ð¾Ð±ÑиÑе ÑÑми да пÑиÑÑигне на Ð½Ð¾Ð²Ð¸Ñ Ñи Ñед ÑÑÑ Ð·Ð°Ð¿Ð°Ð·ÐµÐ½Ð¸ обединÑÐ²Ð°Ð½Ð¸Ñ Ð¸ ÑиÑлови ÑоÑмаÑи, вмеÑÑо да пÑиÑÑигне изÑиÑÑен Ð¾Ñ ÑÑÑ
.
ÐеговиÑе две докÑменÑиÑани огÑаниÑÐµÐ½Ð¸Ñ Ñа Ñези, Ñ ÐºÐ¾Ð¸Ñо ÑÑÑбва да Ñе ÑÑобÑази дизайнÑÑ. ÐоÑигиÑанеÑо на ÑоÑмÑлиÑе е огÑаниÑено до ÑедакÑиÑÐ°Ð½Ð¸Ñ Ð»Ð¸ÑÑ: пÑепÑаÑкиÑе вÑÑÑе в него Ñе пÑенапиÑваÑ, а ÑоÑмÑла на дÑÑг лиÑÑ, коÑÑо ÑоÑи кÑм пÑемеÑÑенаÑа облаÑÑ, ÑÑÑо Ñе пÑенапиÑва, но коÑекÑиÑÑа Ñледва Ñамо пÑепÑаÑки, коиÑо Ñа наÑоÑени кÑм ÑедакÑиÑÐ°Ð½Ð¸Ñ Ð»Ð¸ÑÑ, Ñака Ñе вÑÑка ÑÑ
ема Ñ Ð¿ÑепÑаÑки Ð¼ÐµÐ¶Ð´Ñ ÑазлиÑни ÑабоÑни книги заÑлÑжава ÑобÑÑвен одиÑ, вмеÑÑо ÑлÑпо довеÑие. ÐÑоÑо огÑаниÑение е по-ÑÑÑого и е Ð¾Ñ ÑÑÑана на XLS. ÐбобÑениÑе ÑаблиÑи (pivot tables) оÑелÑÐ²Ð°Ñ Ð¿Ñи Ñикли на оÑваÑÑне и Ð·Ð°Ð¿Ð¸Ñ ÐºÐ°Ñо необÑабоÑени запазени запиÑи, а не каÑо моделиÑани обекÑи, коиÑо HotXLS може да меÑÑи, Ñака Ñе вмÑкванеÑо на Ñедове не ÑелокиÑа оÑпеÑаÑÑка на пивоÑа. ÐÑеки Ñаблон, койÑо ÑÑздаваÑе за ÑоÑмаÑа .xls, ÑÑÑбва да Ñазполага ÑвоиÑе обобÑени ÑаблиÑи Ð´Ð°Ð»ÐµÑ Ð¾Ñ Ð²ÑÑка ÑазÑаÑÑваÑа Ñе облаÑÑ.
ÐÑказ за Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° данни в пÑоÑÑÑанÑÑвоÑо за оÑоÑмление
ÐÑоблемÑÑ Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÐµÐ½Ð¸Ñе клеÑки, койÑо дейÑÑвиÑелно доÑÑига до пÑодÑкÑиÑ, не е козмеÑиÑен. Той е ÑÑÑÑкÑÑÑен: деÑайлен Ñед навлиза в обединен ÑÐµÐ³Ð¼ÐµÐ½Ñ Ð¾Ñ Ð¾ÑоÑмлениеÑо, ÑÑойноÑÑиÑе Ð¼Ñ Ð¿Ð¾Ð¿Ð°Ð´Ð°Ñ Ð² покÑиÑи клеÑки и ÑÑÐ°Ð²Ð°Ñ Ð½ÐµÐ²Ð¸Ð´Ð¸Ð¼Ð¸, а обÑиÑе ÑÑми на колониÑе ÑиÑ
о ÑпиÑÐ°Ñ Ð´Ð° ÑÑоÑвеÑÑÑÐ²Ð°Ñ Ð½Ð° Ñова, коеÑо вÑеки, койÑо ÑеÑе лиÑÑа, може да види. ТÑй каÑо FindAt оÑговаÑÑ Ð½Ð° вÑпÑоÑа за покÑиваÑÐ¸Ñ Ñегион за вÑÑка кооÑдинаÑа, генеÑаÑоÑÑÑ Ð¼Ð¾Ð¶Ðµ да оÑкаже Ñози Ð·Ð°Ð¿Ð¸Ñ Ð² моменÑа, в койÑо Ñой би Ñе ÑлÑÑил, вмеÑÑо да доÑÑави оÑÑеÑ, койÑо ÑиÑ
о неоÑÑиÑа ÑеалниÑе данни.
// refuse to write detail data into a merged layout region
if Sheet.MergedCells.FindAt(Row, 1) <> nil then
raise Exception.CreateFmt('row %d overlaps a merged layout region', [Row]);
Sheet.Cells[Row, 1].Value := Detail.Description;
СÑÑаÑа гÑаниÑна пÑовеÑка ÑÑÑбва да Ñе пÑилага навÑÑкÑде, кÑдеÑо по-кÑÑно поÑÑебиÑел Ñе ÑоÑÑиÑа или ÑилÑÑиÑа Ð¸Ð·Ñ Ð¾Ð´Ð°. Ðиапазон Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÑÐ²Ð°Ð½Ð¸Ñ Ð²ÑÑÑе в него не може да Ñе ÑоÑÑиÑа ÑиÑÑо, ÑÑй каÑо ÑоÑÑиÑанеÑо меÑÑи ÑедовеÑе незавиÑимо, а обединÑване, Ð¾Ð±Ñ Ð²Ð°ÑаÑо Ñедове, нÑма единÑÑвен Ñед, Ñ ÐºÐ¾Ð¹Ñо да Ñе пÑемеÑÑи; Excel оÑговоÑи Ñ Ð³ÑеÑка или Ñазвалено оÑоÑмление. ÐиÑÑиплинаÑа, коÑÑо поддÑÑжа оÑÑеÑиÑе коÑекÑни, е геогÑаÑÑка. ÐгÑаниÑеÑе обединÑваниÑÑа до заглавни ленÑи, ÑазделиÑели на ÑекÑии и блокове за подпиÑи и поддÑÑжайÑе ÑаблиÑнаÑа ÑÑедна ÑаÑÑ Ð½Ð° лиÑÑа плоÑка. СÑаÑиÑÑа за генеÑиÑане на оÑÑеÑи по Ñаблони Ñазвива Ñова Ñазделение на оÑоÑмление и данни в пÑлен пÑоÑеÑ, ÑпÑавлÑван Ð¾Ñ Ð¿Ð»ÐµÐ¹ÑÑ Ð¾Ð»Ð´ÑÑи, а ÑÑаÑиÑÑа за ÑÑловно ÑоÑмаÑиÑане и Ð±Ð¾Ð³Ð°Ñ ÑекÑÑ Ð¾Ð±Ñ Ð²Ð°Ñа ÑÑилизиÑанеÑо на Ñози плоÑÑк диапазон Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸.
Ðак Ñе влоÑÐ°Ð²Ð°Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÑваниÑÑа пÑи екÑпоÑÑиÑане
ÐбединÑванеÑо е конÑепÑÐ¸Ñ Ð½Ð° ÑабоÑнаÑа книга и вÑеки ÑекÑÑово оÑиенÑиÑан ÑоÑÐ¼Ð°Ñ Ð·Ð° екÑпоÑÑ Ð³Ð¾ заÑиÑа в ÑазлиÑна ÑÑепен. ÐознаванеÑо на ÑÑиÑе Ð¿Ð¾Ð²ÐµÐ´ÐµÐ½Ð¸Ñ Ð¿ÑедваÑиÑелно ÑпеÑÑÑва QA ÑикÑл. HTML екÑпоÑÑÑÑ Ð²ÑзпÑоизвежда обединÑваниÑÑа вÑÑно, излÑÑвайки colspan и rowspan в една ÑаблиÑа, Ñака Ñе оÑÑеÑÑÑ Ð² бÑаÑзÑÑа запазва ленÑÐ¾Ð²Ð¸Ñ Ñи вид. RTF екÑпоÑÑÑÑ Ð¸Ð·Ð¾Ð±Ñо не обединÑва колони: ÑекÑÑÑÑ Ð¾Ñ Ð·Ð°ÐºÐ¾ÑвенаÑа клеÑка попада в ÑобÑÑвена клеÑка, а оÑÑаналаÑа ÑиÑина Ð¾Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÑванеÑо Ñе поÑвÑва каÑо пÑазни клеÑки, коеÑо оÑÑÐ°Ð²Ñ ÑиÑокоÑо заглавие визÑално пÑибÑÑано влÑво в ÑекÑÑÐ¾Ð²Ð¸Ñ Ð¿ÑоÑеÑоÑ. CSV нÑма конÑепÑÐ¸Ñ Ð·Ð° обединÑване, Ñака Ñе закоÑвенаÑа ÑÑойноÑÑ Ð·Ð°ÐµÐ¼Ð° едно поле, а вÑÑка покÑиÑа клеÑка Ñе излÑÑва каÑо пÑазно поле. ÐзводÑÑ Ð·Ð° ÑабоÑна книга, коÑÑо заÑ
Ñанва и екÑпоÑÑ Ñ ÑазделиÑели, е да дÑÑжиÑе вÑÑка важна инÑоÑмаÑÐ¸Ñ Ð¸Ð·Ð²Ñн обединенаÑа геомеÑÑиÑ; ÑÑаÑиÑÑа за екÑпоÑÑиÑане на CSV, TSV и HTML Ñазглежда подÑобно вÑеки ÑоÑмаÑ.
Ðдно ÑÑпокоение за вÑеки, койÑо пÑеÑÐµÐ³Ð»Ñ Ñова ÑпÑÑмо ÑазмеÑа на Ñайла: обединÑваниÑÑа не ÑÑÑÑÐ²Ð°Ñ Ð¿Ð¾ÑÑи ниÑо в маÑаба на оÑÑеÑа. ТаблиÑаÑа Ñ Ð¾Ð±ÐµÐ´Ð¸Ð½ÑÐ²Ð°Ð½Ð¸Ñ Ðµ миниаÑÑÑна в ÑÑавнение Ñ Ð´Ð°Ð½Ð½Ð¸Ñе в клеÑкиÑе, а ÑеÑенеÑо на покÑиÑа клеÑка вÑе пак минава пÑез FindAt, вмеÑÑо да ÑканиÑа. ÐаÑиÑкÑÑ Ð²ÑÑÑ
Ñ Ð¿ÑоизводиÑелноÑÑÑа пÑи големиÑе ÑабоÑни книги идва Ð¾Ñ Ð´ÑÑгаде, главно Ð¾Ñ Ð½Ð°ÑаÑÑванеÑо на пÑла Ð¾Ñ ÑÑилове и памеÑÑа, коÑÑо заема пÑÑÑÑ Ð·Ð° запиÑ, коеÑо ÑÑаÑиÑÑа за пÑоизводиÑелноÑÑ Ð½Ð° големи ÑабоÑни книги Ñазглежда диÑекÑно. ÐваÑа API за обединÑване, опеÑаÑииÑе за ÑÑÑÑкÑÑÑно ÑедакÑиÑане и демонÑÑÑаÑииÑе на Ñаблони Ñе доÑÑавÑÑ Ñ ÐºÐ¾Ð¼Ð¿Ð¾Ð½ÐµÐ½Ñа HotXLS.