ÐÑеименÑвайÑе лиÑÑ Ð¾Ñ âSummaryâ?на âOverviewâ?в генеÑиÑана ÑабоÑна книга и вÑÑка вÑÑÑеÑна вÑÑзка, коÑÑо ÑоÑи кÑм Summary!A1, Ñе ÑпÑе да ÑабоÑи. Ðез изклÑÑение пÑи запиÑ, без ÑÑобÑение пÑи оÑваÑÑне. ÐÑÑзкаÑа пÑодÑлжава да Ñе показва и изглежда акÑивна, но не води до никÑде. Ðодобни пÑоблеми вÑÐ·Ð½Ð¸ÐºÐ²Ð°Ñ Ð¸ Ñлед конвеÑÑиÑане ÑÑез âзапиÑ?каÑоâ?или пÑи пÑеобÑазÑване Ð¼ÐµÐ¶Ð´Ñ .xls и .xlsx, когаÑо коменÑÐ°Ñ Ñе измеÑÑи Ñ ÐµÐ´Ð½Ð° колона или оÑноÑиÑелна вÑÑзка загÑби ÑелÑа Ñи. РдвеÑе ÑÑнкÑии ÑÑдÑÑÐ¶Ð°Ñ ÑÑÑÑоÑние за пÑеглед, Ð¾Ñ ÐºÐ¾ÐµÑо завиÑÑÑ Ð¿Ð¾ÑÑебиÑелиÑе, Ñака Ñе когаÑо Ñе повÑедÑÑ, гÑеÑкаÑа оÑÑава ÑкÑиÑа, докаÑо нÑкой не кликне вÑÑÑ
Ñ ÑÑÑ
.
Това е пÑакÑиÑеÑкаÑа пÑиÑина, поÑади коÑÑо коменÑаÑиÑе и Ñ Ð¸Ð¿ÐµÑвÑÑзкиÑе изиÑÐºÐ²Ð°Ñ Ð¿Ð¾Ð²ÐµÑе внимание, оÑколкоÑо подÑказва вÑнÑниÑÑ Ð¸Ð¼ вид. HotXLS пÑедоÑÑÐ°Ð²Ñ Ð½Ð° Delphi и C++Builder ÑазÑабоÑÑиÑиÑе диÑекÑен доÑÑÑп за Ð·Ð°Ð¿Ð¸Ñ Ð¸ на дваÑа обекÑа в XLS и XLSX без Ð½ÐµÐ¾Ð±Ñ Ð¾Ð´Ð¸Ð¼Ð¾ÑÑ Ð¾Ñ Excel авÑомаÑизаÑиÑ. ÐбÑаÑнаÑа ÑÑÑана на Ñози конÑÑол е оÑговоÑноÑÑÑа: библиоÑекаÑа запиÑва ÑоÑниÑе Ñели, коиÑо й подадеÑе, без да ги валидиÑа, Ñака Ñе поддÑÑжанеÑо на коÑекÑен ÑабоÑен пÑоÑÐµÑ Ð·Ð° пÑеглед е задаÑа на ваÑÐ¸Ñ ÐºÐ¾Ð´, а не на Excel.
ÐоменÑаÑи в клеÑкиÑе каÑо авÑомаÑизиÑани запиÑи за пÑеглед
РклаÑÐ¾Ð²Ð¸Ñ Ð¼Ð¾Ð´ÐµÐ» на XLSX коменÑаÑÑÑ Ðµ Ð¾Ð±ÐµÐºÑ Ð½Ð° ниво ÑабоÑен лиÑÑ: неговиÑÑ Ð°Ð²ÑÐ¾Ñ Ðµ налиÑе, Ñой знае ÑÐ²Ð¾Ñ Ñед, ÑвоÑÑа колона и има ÑекÑÑ. ÐолеÑо за авÑÐ¾Ñ Ð¸Ð¼Ð° важно знаÑение. ÐогаÑо генеÑиÑанаÑа книга пÑеминава пÑез веÑига за одиÑ, пÑÑвиÑÑ Ð²ÑпÑÐ¾Ñ Ðµ кой е напиÑал дадена бележка, а бележка без авÑÐ¾Ñ Ð¾ÑÑÐ°Ð²Ñ Ñова поле пÑазно. Ðинаги маÑкиÑайÑе авÑомаÑиÑно генеÑиÑаниÑе коменÑаÑи Ñ Ð¸Ð¼ÐµÑо на ÑÑоÑвеÑнаÑа ÑÑлÑга, за да бÑде пÑÐ¾Ð¸Ð·Ñ Ð¾Ð´ÑÑ Ð¸Ð¼ ÑÑен.
var
Book: TXLSXWorkbook;
Sheet: TXLSXWorksheet;
Note: TXLSXComment;
begin
Book := TXLSXWorkbook.Create;
try
Book.Open('reconciliation.xlsx');
Sheet := Book.Sheets[0];
// Authored note on the adjusted figure
Sheet.AddComment(14, 4, 'Manual adjustment: late FX rate, see ticket FIN-2214',
'recon-service');
// Update an existing note instead of stacking a second one
Note := Sheet.Comments.FindAt(14, 4);
if Note <> nil then
Note.Text := Note.Text + ' [verified 2026-06-11]';
Book.SaveAs('reconciliation-reviewed.xlsx');
finally
Book.Free;
end;
end;
ÐеÑодÑÑ FindAt е по-полезен, оÑколкоÑо изглежда. ÐвÑомаÑиÑна задаÑа, коÑÑо Ñе ÑеÑÑаÑÑиÑа Ñлед вÑеменна гÑеÑка, би извикала AddComment вÑоÑи пÑÑ Ð·Ð° ÑÑÑаÑа клеÑка, коеÑо води до два наÑложени коменÑаÑа. Ðинаги пÑовеÑÑвайÑе пÑÑво Ñ FindAt и обновÑвайÑе вÑÑнаÑÐ¸Ñ Ð¾Ð±ÐµÐºÑ. ÐолекÑиÑÑа Comments излага ÑÑÑо DeleteAt и DeleteInRange. ÐаÑианÑÑÑ Ð·Ð° диапазон е изклÑÑиÑелно Ñдобен за изÑиÑÑване на вÑÑÑеÑни QA аноÑаÑии Ð¾Ñ ÑÑла облаÑÑ Ñ ÐµÐ´Ð½Ð¾ извикване, пÑеди ÑайлÑÑ Ð´Ð° напÑÑне оÑганизаÑиÑÑа.
ÐÑнÑниÑе URL адÑеÑи и вÑÑÑеÑниÑе вÑÑзки в книгаÑа Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ ÑазлиÑни API
ФоÑмаÑÑÑ OOXML ÑÑÑ
ÑанÑва дваÑа вида вÑÑзки на ÑазлиÑни меÑÑа. ÐÑнÑниÑÑ URL адÑÐµÑ Ñе запиÑва каÑо вÑÑзка в .rels ÑаÑÑÑа на лиÑÑа, а клеÑкаÑа ÑоÑи кÑм него по иденÑиÑикаÑÐ¾Ñ (ID). ÐÑÑÑеÑниÑÑ Ð¿ÑеÑ
од никога не докоÑва ÑÐ»Ð¾Ñ Ñ Ð²ÑÑзкиÑе, Ñой е обикновен низ Ñ Ð¼ÐµÑÑоположение (напÑÐ¸Ð¼ÐµÑ Overview!B12), ÑÑÑ
Ñанен диÑекÑно в ÑамаÑа вÑÑзка. HotXLS запазва Ñова ÑазгÑаниÑение в API, вмеÑÑо да пÑеÑоваÑва един меÑод. Това ознаÑава, Ñе избиÑаÑе пÑÐ°Ð²Ð¸Ð»Ð½Ð¸Ñ Ð¼ÐµÑод вÑз оÑнова на меÑÑоположениеÑо на ÑелÑа:
Sheet.Cells[2, 1].Value := 'Source record';
Sheet.AddHyperlink(2, 1, 'https://intranet.example.com/records/2214',
'Open record 2214', 'ERP source entry');
Sheet.Cells[3, 1].Value := 'Totals';
Sheet.AddHyperlinkToCell(3, 1, 'Overview!B12', 'Jump to totals');
РобекÑа TXLSXHyperlink ÑвойÑÑваÑа Url и Location Ñе изклÑÑÐ²Ð°Ñ Ð²Ð·Ð°Ð¸Ð¼Ð½Ð¾, а IsInternal Ñказва кой Ð¾Ñ Ð´Ð²Ð°Ñа е попÑлнен. Този Ñлаг Ñе пÑовеÑÑва пÑи Ð¾Ð¿Ð¸Ñ Ð½Ð° вÑÑзкиÑе в оÑвоÑен докÑменÑ, когаÑо ÑÑÑбва да Ñе пÑÐ¸Ð»Ð¾Ð¶Ð°Ñ ÑазлиÑни пÑавила за вÑнÑни и вÑÑÑеÑни Ñели: вÑнÑниÑе Ñ
оÑÑове Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° Ñе пÑовеÑÑÐ²Ð°Ñ ÑпÑÑмо ÑпиÑÑк Ñ ÑазÑеÑени адÑеÑи, докаÑо за вÑÑÑеÑниÑе е доÑÑаÑÑÑно да ÑоÑÐ°Ñ ÐºÑм ÑÑÑеÑÑвÑÐ²Ð°Ñ Ð»Ð¸ÑÑ. ÐÑÑÑеÑниÑе вÑÑзки не изиÑÐºÐ²Ð°Ñ Ð³ÐµÐ½ÐµÑиÑане на ÑелаÑионни ÑаÑÑи, коеÑо ги пÑави по-бÑÑзи за маÑова пÑомÑна.
ÐпиÑаниÑÑ Ð¿Ñоблем Ñ Ð¿ÑеименÑванеÑо на лиÑÑове заÑÑга именно вÑÑÑеÑниÑе вÑÑзки, ÑÑй каÑо низÑÑ Ð·Ð° меÑÑоположение не е паÑÑнаÑа ÑеÑеÑенÑиÑ. HotXLS запиÑва ÑоÑÐ½Ð¸Ñ ÑекÑÑ, койÑо Ð¼Ñ Ð¿Ð¾Ð´Ð°Ð´ÐµÑе, и ниÑо не пÑÐ¾Ð¼ÐµÐ½Ñ Ñози ÑекÑÑ, ако лиÑÑÑÑ Ñе пÑеименÑва по-кÑÑно. Ðве ÑÑÑаÑегии Ð¿Ð¾Ð¼Ð°Ð³Ð°Ñ Ð½Ð° пÑакÑика: пÑÑво, пÑеименÑвайÑе вÑиÑки лиÑÑове пÑеди да генеÑиÑаÑе каквиÑо и да е вÑÑзки; вÑоÑо, наÑоÑеÑе вÑÑзкаÑа кÑм деÑиниÑано име (defined name) на ниво ÑабоÑна книга вмеÑÑо кÑм конкÑеÑен адÑÐµÑ Ð½Ð° клеÑка. Excel авÑомаÑиÑно обновÑва деÑиниÑиÑÑа на имеÑо пÑи пÑомÑна на лиÑÑа, Ñака Ñе вÑÑзкаÑа пÑодÑлжава да ÑабоÑи. Този Ð¿Ð¾Ð´Ñ Ð¾Ð´ Ñе ÑÑÑеÑава Ñ Ð¾Ð¿Ð¸ÑаноÑо в деÑиниÑани имена и ÑоÑмÑли Ð¼ÐµÐ¶Ð´Ñ Ð»Ð¸ÑÑове в HotXLS.
ÐÑ ÑÑÑана на XLS: ÑÑÑиÑе конÑепÑии, по-ÑÑаÑа аÑÑ Ð¸ÑекÑÑÑа
ÐнÑеÑÑейÑÑÑ Ð½Ð° BIFF8 пÑикÑÐµÐ¿Ñ ÐºÐ¾Ð¼ÐµÐ½ÑаÑиÑе кÑм диапазони, а не кÑм колекÑÐ¸Ñ Ð½Ð° ниво ÑабоÑен лиÑÑ. ÐзвикваÑе AddComment за IXLSRange и полÑÑаваÑе TXLSComment; ÑвойÑÑвоÑо Comment на диапазона ÑеÑе ÑÑÑеÑÑвÑваÑа бележка, а ClearComments ги изÑÑива. ÐозиÑиониÑанеÑо ÑÑк има оÑобеноÑÑи. ÐбекÑÑÑ TXLSComment не показва пÑблиÑно ÑÐ²Ð¾Ñ Ñед и колона, Ñака Ñе ÑÑандаÑÑниÑÑ ÑикÑл за обÑ
ождане и оÑÑиÑане на позиÑиÑÑа на коменÑаÑиÑе изиÑква да запоÑнеÑе Ð¾Ñ ÐºÐ»ÐµÑкиÑе. ÐапиÑвайÑе кооÑдинаÑиÑе на коменÑаÑиÑе пÑи генеÑиÑанеÑо им, ÑÑй каÑо ÑамиÑÑ Ð¾Ð±ÐµÐºÑ Ð½Ñма да ви ги ÑÑобÑи по-кÑÑно.
var
Book: IXLSWorkbook;
Sheet: IXLSWorksheet;
Remark: TXLSComment;
begin
Book := TXLSWorkbook.Create;
Sheet := Book.Sheets.Add;
Sheet.Name := 'Review';
Sheet.Cells.Item[5, 2].Value := 4821.50;
Remark := Sheet.Cells.Item[5, 2].AddComment('Awaiting sign-off from controller');
Remark.Visible := True; // pop the note open on first view
Sheet.AddHyperlink(7, 2, 'https://intranet.example.com/signoff/4821',
'Sign-off form', 'Opens the controller queue');
Book.SaveAs('review.xls');
end;
ÐадаванеÑо на Visible на True е клаÑиÑеÑки наÑин да напÑавиÑе бележкаÑа леÑна за забелÑзване, жÑлÑоÑо поле оÑÑава оÑвоÑено, вмеÑÑо да Ñака поÑоÑване Ñ Ð¼Ð¸ÑкаÑа. ÐбекÑÑÑ TXLSComment в XLS позволÑва ÑоÑмаÑиÑане на ÑаÑÑи Ð¾Ñ ÑекÑÑа ÑÑез ÑвойÑÑвоÑо TextRuns (напÑÐ¸Ð¼ÐµÑ ÑдебелÑване на пÑедÑпÑеждение до обикновен ÑекÑÑ), вÑзможноÑÑ, коÑÑо не Ñе поддÑÑжа по ÑÑÑÐ¸Ñ Ð½Ð°Ñин в XLSX коменÑаÑиÑе. ХипеÑвÑÑзкиÑе в XLS Ñе ÑÑÐ·Ð´Ð°Ð²Ð°Ñ ÑÑез ÑÑи пÑеÑоваÑени меÑода (Ñамо адÑеÑ, Ñ Ð¿Ð¾ÐºÐ°Ð·Ð²Ð°Ð½ ÑекÑÑ Ð¸Ð»Ð¸ Ñ Ð¿Ð¾Ð´Ñказка) и Ñе ÑеÑÐ°Ñ Ð¿Ñез колекÑиÑÑа HyperLinks на ÑабоÑÐ½Ð¸Ñ Ð»Ð¸ÑÑ.
СÑздаване на Ð¸Ð½Ð´ÐµÐºÑ Ñ Ð¿ÑепÑаÑки вмеÑÑо пÑÑÑнаÑи бележки
ÐÑи налиÑие на повеÑе Ð¾Ñ Ð´ÐµÑеÑина аноÑаÑии пÑегледÑÑ ÑÑез поÑоÑване Ñ Ð¼Ð¸ÑкаÑа ÑÑава нееÑекÑивен. ÐележкиÑе Ñе наÑÑÑÐ¿Ð²Ð°Ñ Ð½Ð° лиÑÑове, коиÑо никой не оÑваÑÑ, и най-важниÑе Ð¾Ñ ÑÑÑ
леÑно Ñе пÑопÑÑкаÑ. Ðай-добÑоÑо ÑеÑение е генеÑиÑане на индекÑен лиÑÑ Ð·Ð° пÑеглед: по един Ñед за вÑÑко аноÑиÑано меÑÑоположение, ÑÑдÑÑÐ¶Ð°Ñ Ð¸Ð¼ÐµÑо на лиÑÑа, адÑеÑа на клеÑкаÑа, авÑоÑа и ÑезÑме на бележкаÑа. ÐоÑледнаÑа колона ÑÑдÑÑжа вÑÑÑеÑна вÑÑзка, ÑÑздадена Ñ AddHyperlinkToCell, коÑÑо води диÑекÑно до аноÑиÑанаÑа клеÑка. Така ÑеÑензенÑÑÑ ÑеÑе ÑÑÑÑкÑÑÑиÑан ÑпиÑÑк, вмеÑÑо да пÑеÑÑÑÑва ÑÑлаÑа ÑаблиÑа.
Този Ð¸Ð½Ð´ÐµÐºÑ Ñе генеÑиÑа леÑно, ÑÑй каÑо пÑиложениеÑо знае вÑÑка позиÑиÑ, коÑÑо е пÑоменило. ÐобавÑйÑе Ð·Ð°Ð¿Ð¸Ñ (лиÑÑ, Ñед, колона, авÑоÑ, ÑезÑме) кÑм ÑпиÑÑк пÑи Ð·Ð°Ð¿Ð¸Ñ Ð½Ð° вÑеки коменÑаÑ, Ñлед коеÑо генеÑиÑайÑе индекÑÐ½Ð¸Ñ Ð»Ð¸ÑÑ Ð¿Ð¾Ñледен. Ðве подобÑÐµÐ½Ð¸Ñ Ñа полезни: ÑоÑÑиÑайÑе индекÑа по важноÑÑ Ð¸Ð»Ð¸ по лиÑÑ, и поÑÑавеÑе вÑÑзка за вÑÑÑане обÑаÑно в заглавиеÑо на индекÑа. ТÑй каÑо вÑÑÑеÑниÑе вÑÑзки Ñа обикновени ÑекÑÑови меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð±ÐµÐ· ÑелаÑионни ÑаÑÑи, голÑм Ð¸Ð½Ð´ÐµÐºÑ Ð½Ðµ ÑвелиÑава ÑазмеÑа на Ñайла или вÑемеÑо за запиÑ.
СÑÑиÑÑ Ð»Ð¸ÑÑ Ðµ полезен и пÑи обÑабоÑка на вÑÑнаÑÐ¸Ñ Ñайл. ÐаÑеÑо пÑиложение може да ÑеÑе клеÑкиÑе ÑÑÑ ÑÑаÑÑÑи до индекÑниÑе Ñедове, вмеÑÑо да пÑеÑÑÑÑва оÑново ÑÑлаÑа ÑабоÑна книга за пÑоменени коменÑаÑи. СÑÑÑкÑÑÑиÑана колона ÑÑÑ ÑÑаÑÑÑи Ñе ÑеÑе леÑно, докаÑо ÑазпÑÑÑнаÑиÑе коменÑаÑи Ñа ÑÑÑдни за обÑабоÑка.
ÐÑовеÑка пÑеди изпÑаÑане за пÑедоÑвÑаÑÑване на гÑеÑки
ÐиÑо едно Ð¾Ñ Ñези API не валидиÑа ÑелÑа. ÐÑÑзка кÑм изÑÑÐ¸Ñ Ð»Ð¸ÑÑ, гÑеÑен вÑÑÑеÑен Ñ
оÑÑ Ð¸Ð»Ð¸ неÑÑÑеÑÑвÑÐ²Ð°Ñ Ñайлов Ñподелен ÑеÑÑÑÑ Ñе запиÑÐ²Ð°Ñ Ð±ÐµÐ· пÑедÑпÑеждение. ECMA-376 опÑÐµÐ´ÐµÐ»Ñ ÐºÐ°Ðº Ñе ÑÑÑ
ÑанÑва вÑÑзкаÑа, а не дали ÑÑ Ð²Ð¾Ð´Ð¸ до Ñеално меÑÑоположение. ÐоÑади Ñова е пÑепоÑÑÑиÑелно да добавиÑе кÑаÑка ÑÑÑпка за Ð¾Ð´Ð¸Ñ Ð¿Ñеди извикванеÑо на SaveAs:
- СÑбеÑеÑе вÑиÑки вÑÑÑеÑни меÑÑÐ¾Ð¿Ð¾Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ Ð¸ поÑвÑÑдеÑе, Ñе имеÑо на лиÑÑа пÑеди знака â?â?ÑÑÑеÑÑвÑва в колекÑиÑÑа Ð¾Ñ Ð»Ð¸ÑÑове на книгаÑа.
- ÐÑовеÑеÑе вÑнÑниÑе URL адÑеÑи ÑпÑÑмо ÑпиÑÑк Ñ ÑазÑеÑени пÑоÑоколи и Ñ
оÑÑове. ÐÑÑиÑа Ð¾Ñ Ñип
file://и UNC адÑеÑи Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° ÑазкÑиÑÑ ÑиÑÑемна инÑоÑмаÑÐ¸Ñ Ð¸ ÑпиÑÐ°Ñ Ð´Ð° ÑабоÑÑÑ Ð¸Ð·Ð²Ñн мÑежаÑа. - ÐÑебÑойÑе коменÑаÑиÑе на вÑеки лиÑÑ Ð¸ ги ÑÑавнеÑе Ñ Ð¾ÑÐ°ÐºÐ²Ð°Ð½Ð¸Ñ Ð±Ñой, за да оÑкÑиеÑе евенÑÑални дÑблиÑÐ°Ð½Ð¸Ñ Ð¿Ñи повÑоÑни опиÑи.
- ÐÑемаÑ
неÑе вÑÑÑеÑниÑе аноÑаÑии Ñ
DeleteInRange, когаÑо ÑайлÑÑ Ðµ пÑедназнаÑен за вÑнÑни полÑÑаÑели.
Тази ÑÑÑпка може да Ñе авÑомаÑизиÑа. ÐÐµÑ Ð°Ð½Ð¸ÐºÐ°Ñа е ÑÑ Ð¾Ð´Ð½Ð° Ñ Ð¾Ð¿Ð¸ÑаноÑо в екÑпоÑÑиÑане на ÑезÑлÑаÑи Ð¾Ñ Ð±Ð°Ð·Ð¸ данни в Excel оÑÑеÑи, но е наÑоÑена кÑм вÑÑзки и коменÑаÑи.
Ðна подÑобноÑÑ Ð¿Ñи кавиÑкиÑе ÑеÑÑо води до гÑеÑки пÑи ÑÑÑно ÑглобÑване на меÑÑоположениÑ. ÐиÑÑ, ÑиеÑо име ÑÑдÑÑжа инÑеÑвал, ÑÑÑбва да бÑде огÑаден Ñ ÐµÐ´Ð¸Ð½Ð¸Ñни кавиÑки: 'Quarterly Totals'!A1, а не Quarterly Totals!A1. HotXLS пÑилага ÑÑÑиÑе пÑавила за ÑоÑмÑли, Ñака Ñе ако вÑÑзкаÑа ÑабоÑи вÑв ÑоÑмÑла, ÑÑ Ñе ÑабоÑи и ÑÑк. ÐеÑиÑиÑано име Ñ Ð¸Ð½ÑеÑвал води до неÑабоÑеÑа вÑÑзка.
ÐоменÑаÑиÑе и Ñ Ð¸Ð¿ÐµÑвÑÑзкиÑе Ñа елеменÑиÑе, на коиÑо поÑÑебиÑелиÑе ÑазÑиÑаÑ, поÑади коеÑо неÑабоÑеÑиÑе вÑÑзки Ð¼Ð¾Ð³Ð°Ñ Ð´Ð° Ð´Ð¾Ð²ÐµÐ´Ð°Ñ Ð´Ð¾ ÑеÑиозни пÑоблеми. ÐзгÑадеÑе авÑомаÑиÑна валидаÑÐ¸Ñ Ð¸ вÑÑзкиÑе ви Ñе оÑÑÐ°Ð½Ð°Ñ ÑÑабилни пÑи вÑÑкакви пÑомени. ÐÑлноÑо API опиÑание е доÑÑÑпно на пÑодÑкÑоваÑа ÑÑÑаниÑа за HotXLS Component.