מאמר טכני

מאמר טכני: Setting Excel Document Properties in Delphi with HotXLS בעברית

הגרסה המקומית הזו מתמקדת ב-Setting Excel document properties and workbook metadata in Delphi with HotXLS ומשתמשת במאמר האנגלי המעודכן כבסיס טכני לצוותי Delphi, PDF ותוכנות מסמכים

הדף הופך את מאמר הבסיס המעודכן לנקודות בדיקה מעשיות עבור תכנון, יישום ואימות

מה סונכרן מהמאמר האנגלי

מאמר הבסיס באנגלית הורחב בהקשר יישומי, החלטות טכניות ודוגמאות קונקרטיות, ולכן דף זה מיועד לשמש מדריך עבודה ולא תקציר קצר

חלקים חשובים במאמר הבסיס המעודכן:

  • השתמשו תחילה בקובצי קלט קטנים שניתן לשחזר
  • השאירו ללא שינוי שמות מוצרים, API, קבצים וערכי literal
  • שמרו את פלט ה-validator ואת פרטי הגרסאות יחד עם קובץ הדוגמה שנוצר

בחירות מעשיות ביישום

התחילו מסוג הקובץ, הפלט הרצוי ומצב השגיאה שהמשתמש צריך לראות. לאחר מכן קשרו כל קריאת API לתוצאה ניתנת לבדיקה, כדי שאימות, רישום ותמיכה יוכלו לשחזר את תרחיש הלקוח

  • השתמשו תחילה בקובצי קלט קטנים שניתן לשחזר
  • השאירו ללא שינוי שמות מוצרים, API, קבצים וערכי literal
  • שמרו את פלט ה-validator ואת פרטי הגרסאות יחד עם קובץ הדוגמה שנוצר

קוד ונקודות API

דוגמאות הקוד נשמרות ללא שינוי כדי שמפתחים יוכלו להשוות אותן ישירות לפרויקטי Delphi, C++Builder ו-Lazarus/FPC

var
  Book: TXLSXWorkbook;
begin
  Book := TXLSXWorkbook.Create;
  try
    if Book.Open('statement-template.xlsx') <> 1 then
      raise Exception.Create('Template not available');

    // Overwrite every field: anything left untouched is
    // inherited from whoever designed the template.
    Book.Title := 'Account Statement 2026-06 / ACME Corp';
    Book.Subject := 'Monthly account statement';
    Book.Author := 'Billing Service 4.2';
    Book.LastModifiedBy := 'Billing Service 4.2';
    Book.Company := 'Northwind Financial';
    Book.Category := 'Customer Delivery';
    Book.Keywords := 'statement;billing;2026-06;acct-10024';
    Book.Description := 'Generated document - manual edits are not retained';
    Book.Created := Now;
    Book.Modified := Now;

    Book.SaveAs('statement-10024.xlsx');
  finally
    Book.Free;
  end;
end;
var
  Legacy: IXLSWorkbook;     // reference-counted interface: no manual Free
begin
  Legacy := TXLSWorkbook.Create;
  if Legacy.Open('archive-1999.xls') <= 0 then
    raise Exception.Create('Cannot open archive file');

  Legacy.Title := 'FY1999 ledger (migrated copy)';
  Legacy.Author := 'Archive Migration Batch';
  Legacy.Company := 'Northwind Financial';
  Legacy.Comments := 'Migrated 2026-06-11; source retained in cold storage';
  Legacy.LastSavedBy := 'migration-svc';   // BIFF WRITEACCESS record

  Legacy.SaveAs('archive-1999-stamped.xls');
end;
var
  Book: TXLSXWorkbook;
begin
  Book := TXLSXWorkbook.Create;
  try
    if Book.Open(FileName) = 1 then
    begin
      Writeln(Format('%s | title="%s" author="%s" created=%s',
        [ExtractFileName(FileName), Book.Title, Book.Author,
         FormatDateTime('yyyy-mm-dd', Book.Created)]));
      if Book.Created = 0 then
        Writeln('  no creation date recorded');
    end;
  finally
    Book.Free;
  end;
end;

בדיקה לפני פרסום

בדקו את קובץ הפלט באותם כלים שבהם ישתמש הלקוח או הארכיון. תעדו גרסת רכיב, נתוני בדיקה, גרסת validator ותוצאה נצפית כדי לעקוב במדויק אחר רגרסיה עתידית

הרחבה מעשית

במאמר הזה על אוטומציית גיליונות, נוסחאות, טבלאות, ייצוא ובקרת נתונים המטרה אינה רק לתאר מה הרכיב או הזרימה עושים, אלא להראות איך קוראים אותם בתוך עבודה אמיתית: מה בודקים תחילה, איזה מצב כשל צריך להישאר גלוי, ואיך מחברים את הקריאות כך שאפשר יהיה להריץ את אותו מסלול שוב מחר בלי לנחש מה השתנה

כשעובדים עם אוטומציית גיליונות, נוסחאות, טבלאות, ייצוא ובקרת נתונים, כדאי להתחיל מקלט קטן ושחזורי, להגדיר תוצאה צפויה אחת ברורה, ורק אחר כך לעבור לזרימה המלאה שבה גודל, תוכן, הרשאות או מבנה פנימי הופכים את הבדיקה לרגישה יותר. כך כל שינוי קטן נשאר ניתן להסבר ולא נעלם בתוך קובץ גדול או דוגמה חצי־מוכנה

  • בדקו קלט קטן ושחזורי לפני מעבר לקבצי ייצור
  • תעדו גרסאות רכיב, מנוע וכלי אימות יחד עם התוצאה
  • חזרו על אותו מסלול קריאה כדי לוודא שאין סטייה