ТÑи гÑÑпи наÑÑÑойки на ÑабоÑни лиÑÑове нÑÐ¼Ð°Ñ Ð½Ð¸Ñо обÑо ÑÑÑ ÑÑойноÑÑиÑе на клеÑкиÑе и Ð¸Ð¼Ð°Ñ Ð²ÑиÑко обÑо Ñ Ñова как Ñе дÑÑжи ÑайлÑÑ, Ñлед каÑо излезе Ð¾Ñ Ð²Ð°ÑÐ¸Ñ ÐºÐ¾Ð´. ÐаÑиÑаÑа на лиÑÑа опÑÐµÐ´ÐµÐ»Ñ ÐºÐ¾Ð¸ клеÑки може да ÑедакÑиÑа поÑÑебиÑелÑÑ, Ñлед каÑо Ð¼Ñ Ð¿ÑедадеÑе ÑабоÑнаÑа книга. ÐаÑÑÑойкиÑе на ÑÑÑаниÑаÑа ÑикÑиÑÐ°Ñ Ð¾ÑиенÑаÑиÑÑа, ÑазмеÑа на Ñ Ð°ÑÑиÑÑа и полеÑаÑа (margins). ÐаÑÑÑойкиÑе за пеÑÐ°Ñ (повÑаÑÑÑи Ñе заглавни Ñедове, маÑабиÑане и ÑÑÑни пÑекÑÑÐ²Ð°Ð½Ð¸Ñ Ð½Ð° ÑÑÑаниÑи) конÑÑолиÑÐ°Ñ ÐºÐ°Ðº мÑежа Ñ Ð¿Ñоизволна дÑлжина попада на Ñ Ð°ÑÑиÑ. ÐиÑо едно Ð¾Ñ ÑÑиÑе не Ñе вижда, когаÑо пÑоÑÑо пÑеглеждаÑе данниÑе на екÑана, и ÑÑиÑе Ñе пÑовалÑÑ ÑÐ¸Ñ Ð¾Ð¼Ñлком в пÑакÑикаÑа, когаÑо Ñа гÑеÑни. HotXLS, оÑигинална библиоÑека за елекÑÑонни ÑаблиÑи за Delphi и C++Builder, излага пÑлнаÑа повÑÑÑ Ð½Ð¾ÑÑ Ð·Ð° .xls и .xlsx, коеÑо ознаÑава, Ñе ÑÑ ÑÑÑо Ñака вÑзпÑоизвежда вÑÑко нелогиÑно пÑавило на Excel, вгÑадено в неÑ.
ÐÑÑвоÑо Ð¾Ñ Ñези пÑавила обÑÑква поÑÑи вÑеки пÑÑÐ²Ð¸Ñ Ð¿ÑÑ, когаÑо заÑиÑи генеÑиÑан лиÑÑ. ÐзвикайÑе Protect и изведнÑж никой не може да пиÑе в ниÑо една клеÑка, вклÑÑиÑелно в колониÑе за вÑвеждане, около коиÑо ÑÑе изгÑадили ÑабоÑнаÑа книга. ÐиÑо в кода ви не е докоÑвало Ñези колони и ÑоÑно заÑова Ñе ÑлÑÑва Ñова.
ÐÑÑка клеÑка Ñе Ñажда заклÑÑена
ECMA-376 деÑиниÑа locked каÑо ÑаÑÑ Ð¾Ñ Ð·Ð°Ð¿Ð¸Ñа за ÑоÑмаÑиÑане на клеÑкаÑа, а не каÑо ÑвойÑÑво на ÑамаÑа заÑиÑа, и по подÑазбиÑане е true. ÐаÑиÑаÑа на лиÑÑа е пÑоÑÑо пÑевклÑÑваÑелÑÑ, койÑо пÑави Ñлага пÑиложим. Така Ñе ÑÑлаÑа мÑежа ноÑи Ñлаг за заклÑÑване Ð¾Ñ Ð¼Ð¾Ð¼ÐµÐ½Ñа, в койÑо ÑÑÑеÑÑвÑва - в ÑпÑÑо ÑÑÑÑоÑние, а извикванеÑо на Protect акÑивиÑа вÑиÑки Ñлагове наведнÑж. РеÑениеÑо е да зададеÑе Ñеда ÑÑзнаÑелно: изгÑадеÑе оÑоÑмлениеÑо, изÑиÑно оÑклÑÑеÑе диапазониÑе, коиÑо поÑÑебиÑелиÑе ÑÑÑбва да ÑедакÑиÑаÑ, и заÑиÑеÑе накÑаÑ.
Book := TXLSXWorkbook.Create;
try
Sheet := Book.Sheets.Add('Timesheet');
// ... header row, name column, and rate formulas written here ...
Sheet.Range['B2:B50'].SetLocked(False); // staff type hours here
Sheet.Range['F2:F50'].SetFormulaHidden(True); // keep the rate math private
Sheet.Protect('review-2026'); // now the lock flags bite
Book.SaveAs('timesheet.xlsx');
finally
Book.Free;
end;
SetFormulaHidden пÑави неÑо оÑделно и леÑно за пÑенебÑегване: докаÑо заÑиÑаÑа е акÑивна, клеÑкаÑа вÑе оÑе показва ÑвоÑÑа изÑиÑлена ÑÑойноÑÑ, но ленÑаÑа за ÑоÑмÑли не показва ниÑо. Това е важно, когаÑо ÑоÑмÑла вгÑажда ÑÑавки за ÑакÑÑÑиÑане, маÑжове или Ñегла за оÑенÑване, коиÑо не биÑ
Ñе иÑкали да пÑедоÑÑавиÑе на вÑеки полÑÑаÑел, кÑо кликне вÑÑÑ
Ñ Ð¾Ð±ÑаÑа ÑÑма. ÐÑв ÑаÑадаÑа XLS ÑÑÑоÑо намеÑение Ñе изÑазÑва за вÑеки диапазон ÑÑез IXLSRange.Locked и FormulaHidden. РабоÑниÑÑ Ð»Ð¸ÑÑ Ñам ÑÑÑо ноÑи пеÑнадеÑÐµÑ Ñлага Allow* (AllowSort, AllowAutoFilter, AllowFormatCells и оÑÑаналиÑе), Ñака Ñе заÑиÑениÑÑ Ð»Ð¸ÑÑ Ð²Ñе оÑе да може да Ñе ÑоÑÑиÑа и ÑилÑÑиÑа, вмеÑÑо да бÑде замÑазен в запеÑаÑан вид.
Ðакво вÑÑÑноÑÑ Ð·Ð°ÑиÑава паÑолаÑа за заÑиÑа
РдваÑа ÑоÑмаÑа ÑÑÑ ÑанÑÐ²Ð°Ñ Ð¿Ð°ÑолаÑа за заÑиÑа на лиÑÑа и ÑабоÑнаÑа книга каÑо оÑÑаÑÑл 4-ÑиÑÑен Ñ ÐµÑ. ШеÑÑнадеÑÐµÑ Ð±Ð¸Ñа ознаÑаваÑ, Ñе безбÑой низове ÑÑÐ²Ð¿Ð°Ð´Ð°Ñ Ñ Ð²ÑÑка дадена паÑола, а инÑÑÑÑменÑиÑе за пÑÐµÐ¼Ð°Ñ Ð²Ð°Ð½Ðµ Ñа на едно ÑÑÑÑене ÑазÑÑоÑние. ТÑеÑиÑайÑе заÑиÑаÑа каÑо пÑедпазен колан ÑÑеÑÑ ÑлÑÑайни ÑедакÑии, а не каÑо конÑÑол на доÑÑÑпа. Ð¢Ñ Ðµ пÑавилниÑÑ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½Ñ Ð·Ð° ÑпиÑане на поÑÑебиÑелиÑе да пиÑÐ°Ñ Ð²ÑÑÑ Ñ ÐºÐ¾Ð»Ð¾Ð½Ð°Ñа Ñ ÑоÑмÑли и гÑеÑниÑÑ Ð¸Ð½ÑÑÑÑÐ¼ÐµÐ½Ñ Ð·Ð° вÑиÑко, коеÑо вклÑÑва дÑмаÑа конÑиденÑиално.
Ðдно ниво нагоÑе, ProtectWorkbook вÑв ÑаÑадаÑа XLSX заклÑÑва ÑÑÑÑкÑÑÑаÑа на ÑабоÑнаÑа книга, коеÑо пÑедоÑвÑаÑÑва добавÑнеÑо, пÑеименÑванеÑо, изÑÑиванеÑо или пÑенаÑежданеÑо на лиÑÑове. ÐадавайÑе го винаги, когаÑо ÑпиÑÑкÑÑ Ñ Ð»Ð¸ÑÑове Ñам по Ñебе Ñи е Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñ Ñ Ð¿Ð°ÑÑÐµÑ Ð¿Ð¾ веÑигаÑа, койÑо индекÑиÑа лиÑÑовеÑе по име или позиÑиÑ. ÐÑеименÑваниÑÑ Ð»Ð¸ÑÑ Ð½Ð°ÑÑÑава импоÑÑиÑанеÑо Ð¾Ñ Ð´ÑÑгаÑа ÑÑÑана ÑоÑно Ñолкова ÑигÑÑно, колкоÑо и изÑÑиÑаÑа колона. ФаÑадаÑа XLS оÑÑазÑва Ñова наÑлоÑване Ñ TXLSWorkbook.Protect на ниво ÑабоÑна книга и Ð¸Ð·Ð²Ð¸ÐºÐ²Ð°Ð½Ð¸Ñ Ð½Ð° Protect за вÑеки лиÑÑ, плÑÑ ÑвойÑÑво isProtected за код, койÑо ÑÑÑбва да инÑпекÑиÑа наÑледен Ñайл, пÑеди да модиÑиÑиÑа каквоÑо и да било.
ÐогаÑо изиÑкванеÑо е Ñеална повеÑиÑелноÑÑ, меÑ
анизмÑÑ Ñе пÑÐ¾Ð¼ÐµÐ½Ñ Ð¸Ð·ÑÑло. SaveAsEncrypted пÑоизвежда AES-кÑипÑиÑан Ð¿Ð°ÐºÐµÑ Ð¿Ð¾ ÑÑ
емаÑа ECMA-376 Standard Encryption, опиÑана подÑобно в ÑÑководÑÑвоÑо за AES-заÑиÑен XLSX изÑ
од, а оÑÑаÑÑлаÑа XLS ÑаÑада запиÑва и ÑеÑе RC4-кÑипÑиÑани .xls Ñайлове ÑÑез EncryptionPassword и пÑеÑоваÑванеÑо Ñ Ð¿Ð°Ñола на Open. РазликаÑа не е академиÑна. ÐаÑиÑениÑÑ Ð»Ð¸ÑÑ Ñе пÑенаÑÑ Ð² ÑиÑÑ ÑекÑÑ, Ñака Ñе вÑеки zip инÑÑÑÑÐ¼ÐµÐ½Ñ Ð¼Ð¾Ð¶Ðµ да пÑоÑеÑе ÑÑойноÑÑиÑе на клеÑкиÑе мÑ, докаÑо кÑипÑиÑаниÑÑ Ð¿Ð°ÐºÐµÑ Ðµ неÑеÑим без паÑолаÑа. ÐдиÑоÑÑко изиÑкване, коеÑо казва, Ñе "ÑайлÑÑ Ð·Ð° заплаÑи ÑÑÑбва да бÑде заÑиÑен", поÑÑи винаги ознаÑава кÑипÑиÑане, какÑвÑо и ÑеÑмин да Ñе използва.
ÐаÑÑÑойкаÑа на ÑÑÑаниÑаÑа е ÑаÑÑ Ð¾Ñ Ð´Ð¾Ð³Ð¾Ð²Ð¾Ñа за докÑменÑа
ÐоведениеÑо пÑи пеÑÐ°Ñ Ðµ невидимо на екÑана, поÑади коеÑо Ñолкова ÑеÑÑо Ñе доÑÑÐ°Ð²Ñ Ð² неÑабоÑÐµÑ Ð²Ð¸Ð´. РмоменÑа, в койÑо ÐºÐ»Ð¸ÐµÐ½Ñ Ð¾ÑпеÑаÑа ÑабоÑнаÑа книга или Ñ ÐµÐºÑпоÑÑиÑа в PDF за одиÑоÑ, полеÑаÑа, маÑабиÑанеÑо и повÑаÑÑÑиÑе Ñе Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ñе пÑевÑÑÑÐ°Ñ Ð²Ñв ÑÑнкÑионални изиÑкваниÑ, коиÑо никой не е ÑеÑÑвал. ÐÑв ÑаÑадаÑа XLSX Ñези наÑÑÑойки Ñа ÑвÑÑзани диÑекÑно Ñ ÑабоÑÐ½Ð¸Ñ Ð»Ð¸ÑÑ:
Sheet.PageLandscape := True;
Sheet.PaperSize := xlsxPaperA4;
Sheet.SetPageMargins(0.5, 0.5, 0.75, 0.75, 0.3, 0.3);
Sheet.CenterHeader := 'Monthly Timesheet';
Sheet.RightFooter := 'Page &P of &N';
Sheet.PrintArea := '$A$1:$F$60'; // bare reference: no sheet name here
Sheet.PrintTitleRows := '$1:$1'; // header row repeats on every page
Sheet.FitToWidth := 1;
Sheet.FitToHeight := 0; // grow downward as the data grows
Sheet.PrintGridlines := False;
Ðва Ð¾Ñ Ñези Ñедове кÑиÑÑ ÐºÐ°Ð¿Ð°Ð½Ð¸. ÐизовеÑе за гоÑÐ½Ð¸Ñ Ð¸ Ð´Ð¾Ð»Ð½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÑиÑÑл Ð¸Ð·Ð¿Ð¾Ð»Ð·Ð²Ð°Ñ ÐºÐ¾Ð´Ð¾Ð²ÐµÑе за ÑоÑмаÑиÑане на Excel: &P за ÑекÑÑаÑа ÑÑÑаниÑа, &N за обÑÐ¸Ñ Ð±Ñой, Ñ &L, &C и &R за изÑиÑно адÑеÑиÑане на ÑÑиÑе ÑекÑии. ÐÑÑгиÑÑ ÐºÐ°Ð¿Ð°Ð½ е PrintArea, койÑо наÑоÑно пÑиема ÑиÑÑа пÑепÑаÑка кÑм клеÑка. HotXLS го ÑÑÑ
ÑанÑва без квалиÑикаÑÐ¸Ñ Ð¸ Ð´Ð¾Ð±Ð°Ð²Ñ Ð¸Ð¼ÐµÑо на лиÑÑа каÑо пÑеÑикÑ, когаÑо запиÑва Ñайла, Ñак Ñе ако Ñами подадеÑе 'Timesheet!$A$1:$F$60', Ñова Ñе доведе до двойно квалиÑиÑиÑана, непÑавилна пÑепÑаÑка. СÑÑаÑа пÑедпазливоÑÑ Ñе пÑилага и едно ниво по-долÑ: пеÑаÑниÑе облаÑÑи и пеÑаÑниÑе Ð·Ð°Ð³Ð»Ð°Ð²Ð¸Ñ Ñе ÑÑÑ
ÑанÑÐ²Ð°Ñ ÐºÐ°Ñо вгÑадениÑе деÑиниÑани имена _xlnm.Print_Area и _xlnm.Print_Titles, Ñака Ñе никога не добавÑйÑе ÑÑÑно _xlnm.* запиÑи пÑез DefinedNames, в пÑоÑивен ÑлÑÑай дваÑа меÑ
анизма Ñе Ñе боÑÑÑ Ð·Ð° един и ÑÑÑ ÑлоÑ.
ÐаÑабиÑане, коеÑо издÑÑжа на Ñеални пÑоизводÑÑвени обеми данни
ÐомбинаÑиÑÑа FitToWidth := 1 Ñ FitToHeight := 0 Ñе ÑеÑе каÑо "винаги ÑÑбиÑай колониÑе на една ÑÑÑаниÑа, Ñлед коеÑо използвай Ñолкова ÑÑÑаниÑи надолÑ, колкоÑо изиÑÐºÐ²Ð°Ñ Ð´Ð°Ð½Ð½Ð¸Ñе", и Ñова е пÑавилнаÑа наÑÑÑойка по подÑазбиÑане за вÑеки оÑÑÐµÑ Ñ Ð¿Ñоменлив бÑой Ñедове. ÐапанÑÑ Ðµ да наÑÑÑоиÑе ÑикÑиÑан пÑоÑÐµÐ½Ñ Ð¸Ð»Ð¸ двойка за ÑÑбиÑане на ÑÑÑаниÑи ÑпÑÑмо ÑеÑÑов Ñайл Ð¾Ñ ÑÑидеÑÐµÑ Ñеда: подайÑе ÑÑÑиÑе наÑÑÑойки на ÑеÑÑÑÑоÑин пÑоизводÑÑвени Ñеда и ÑезÑлÑаÑÑÑ Ð¸Ð»Ð¸ Ñе Ñе Ñазпадне в деÑеÑки оÑÑÑзани ÑÑÑаниÑи, или Ñе Ñе Ñвие до неÑеÑливоÑÑ. ÐаÑабиÑайÑе ÑиÑинаÑа, оÑÑавеÑе дÑлжинаÑа да ÑаÑÑе и повÑоÑеÑе Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð¸Ñ Ñед пÑез PrintTitleRows, Ñака Ñе ÑÑÑаниÑа ÑедемнадеÑÐµÑ Ð²Ñе оÑе да бÑде ÑеÑлива Ñама по Ñебе Ñи.
Ð ÑÑниÑе пÑекÑÑÐ²Ð°Ð½Ð¸Ñ ÑÐ»ÐµÐ´Ð²Ð°Ñ ÑÑÑаÑа диÑÑиплина на ÑегенеÑиÑане, какÑо вÑиÑко оÑÑанало в генеÑиÑанаÑа ÑабоÑна книга
AddRowBreak(BeforeRow) запоÑва нова ÑÑÑаниÑа пÑеди гÑаниÑа на ÑекÑиÑ, но когаÑо генеÑаÑоÑÑÑ Ñе ÑÑаÑÑиÑа оÑново и ÑедовеÑе Ñе измеÑÑÑÑ, оÑÑаÑÑлоÑо пÑекÑÑване Ñе озовава наÑÑед ÑаблиÑаÑа. ÐÑÑво извикайÑе ClearAllPageBreaks, Ñлед коеÑо добавеÑе оÑново пÑекÑÑваниÑ, изÑиÑлени Ð¾Ñ ÑобÑÑвениÑе бÑоÑÑи на Ñедове на генеÑаÑоÑа, вмеÑÑо да коÑигиÑаÑе ÑÑаÑи позиÑии. ÐÑв ÑаÑадаÑа XLS еквиваленÑниÑе конÑÑоли живеÑÑ Ð² Sheet.PageSetup (оÑиенÑаÑиÑ, ÑÐ°Ð·Ð¼ÐµÑ Ð½Ð° Ñ
аÑÑиÑÑа, полеÑа, низове за гоÑен и долен колонÑиÑÑл, ÑÑбиÑане на ÑÑÑаниÑи), каÑо RepeatRows и RepeatColumns покÑÐ¸Ð²Ð°Ñ Ð¿ÐµÑаÑниÑе заглавиÑ.
ÐÑовеÑка на ÑезÑлÑаÑа пÑеди клиенÑа
ÐÑговеÑе ÑÑÑ Ð·Ð°ÑиÑаÑа и пеÑаÑа ÑподелÑÑ ÐµÐ´Ð½Ð¾ обÑо ÑвойÑÑво: Ñе Ñе пÑовеÑÑÐ²Ð°Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑаÑно на ÑÑка и поÑÑи никога не Ñе пÑовеÑÑваÑ. ÐÑвоÑеÑе генеÑиÑÐ°Ð½Ð¸Ñ Ñайл в Excel и оÑделеÑе девеÑдеÑÐµÑ ÑекÑнди за него. ÐиÑеÑе в клеÑка за вÑвеждане и поÑвÑÑдеÑе, Ñе ÑÑ Ð¿Ñиема вÑвежданеÑо; пиÑеÑе в заклÑÑена клеÑка и поÑвÑÑдеÑе, Ñе Ñе поÑвÑва подканаÑа за заÑиÑа; пÑовеÑеÑе дали ÑкÑиÑаÑа ÑоÑмÑла оÑÑÐ°Ð²Ñ Ð¿Ñазна ленÑаÑа за ÑоÑмÑли. След Ñова изпÑлнеÑе пÑедваÑиÑелен пÑеглед на пеÑаÑа (Print Preview) ÑпÑÑмо пÑоизводÑÑвен обем Ð¾Ñ Ð´Ð°Ð½Ð½Ð¸, а не Ñ Ð¼Ð¾ÑÑÑа Ð¾Ñ ÑÑидеÑÐµÑ Ñеда, и оÑÑеÑеÑе бÑÐ¾Ñ Ð½Ð° ÑÑÑаниÑиÑе, повÑаÑÑÑÐ¸Ñ Ñе заглавен Ñед и номеÑиÑанеÑо на Ð´Ð¾Ð»Ð½Ð¸Ñ ÐºÐ¾Ð»Ð¾Ð½ÑиÑÑл. ÐÑедваÑиÑелниÑÑ Ð¿Ñеглед е ÑÑÑпкаÑа, коÑÑо Ñи изплаÑа ÑÑилиÑÑа, ÑÑй каÑо пеÑаÑнаÑа геомеÑÑÐ¸Ñ Ð·Ð°Ð²Ð¸Ñи Ð¾Ñ Ð½Ð°ÑÑÑойки без показване на екÑана, и оÑвен ÑизиÑеÑки пÑинÑеÑ, Ñова е единÑÑвеноÑо мÑÑÑо, кÑдеÑо гÑеÑка в маÑабиÑанеÑо ÑÑава видима.
Ðдна поÑледна наÑÑÑойка допÑлва пÑегледа. FreezePane(ACol, ARow) запазва Ð·Ð°Ð³Ð»Ð°Ð²Ð½Ð¸Ñ Ð±Ð»Ð¾Ðº в изгледа, докаÑо поÑÑебиÑелÑÑ ÑкÑолиÑа. Това е поведение на екÑана, а не на пеÑаÑ, но поÑÑебиÑелÑÑ Ð¾ÑенÑва ÑÐµÐ»Ð¸Ñ ÐºÑаен пÑодÑÐºÑ Ð½Ð°Ð²ÐµÐ´Ð½Ñж. Ð ÑабоÑна книга, коÑÑо запоÑва живоÑа Ñи каÑо поддÑÑжано Ð¾Ñ Ð´Ð¸Ð·Ð°Ð¹Ð½ÐµÑ Ð¾ÑоÑмление, полÑÑава по-голÑмаÑа ÑаÑÑ Ð¾Ñ Ñова безплаÑно: пÑоÑеÑÑÑ Ð·Ð° генеÑиÑане на оÑÑеÑи по Ñаблони запазва наÑÑÑойкаÑа на ÑÑÑаниÑаÑа в Ñаблона, кÑдеÑо Ñовек Ñ Ðµ наÑÑÑоил ÑпÑÑмо Ñеален пÑинÑеÑ, и оÑÑÐ°Ð²Ñ ÐºÐ¾Ð´Ð° пÑоÑÑо да попÑлни данниÑе и да пÑиложи заÑиÑаÑа оÑново, Ñлед каÑо оÑоÑмлениеÑо Ñе ÑÑÑанови.
HotXLS е оÑигинална Object Pascal библиоÑека за елекÑÑонни ÑаблиÑи за Delphi и C++Builder; пÑлнаÑа ÑпÑавоÑна инÑоÑмаÑÐ¸Ñ Ð·Ð° API за заÑиÑа и наÑÑÑойка на ÑÑÑаниÑи е на ÑÑÑаниÑаÑа на пÑодÑкÑа HotXLS Component.