ייצוא/ייבוא מ/אל גליון אלקטרוני ומסד נתונים שלכם

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

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

הספרייה תומכת בצורה טבעית (כלומר מימוש עצמי של הקבצים) בפורמטים הבאים:

  • Excel 2.x
  • Excel 3.0
  • Excel 5.0 (Excel 5.0 and 95)
  • Excel 8.0 (Excel 97, 2000, XP and 2003)
  • Microsoft OOXML
  • OpenDocument
  • CSV

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

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

הספרייה עצמה יודעת גם לתמוך בעברית וערבית בהתאם למה שכל פורמט מאפשר.

אז איך מייצאים מידע אתם בטח שואלים, אז הנה קטע קוד נחמד בנושא:

{
excel8write.dpr

Demonstrates how to write an Excel 8+ file using the fpspreadsheet library

AUTHORS: Felipe Monteiro de Carvalho
}
program excel8write;

{$mode delphi}{$H+}

uses
 Classes, SysUtils, fpspreadsheet, xlsbiff8,
 laz_fpspreadsheet, fpsconvencoding;

const
 Str_First = 'First';
 Str_Second = 'Second';
 Str_Third = 'Third';
 Str_Fourth = 'Fourth';
 Str_Worksheet1 = 'Meu Relatório';
 Str_Worksheet2 = 'My Worksheet 2';
 Str_Total = 'Total:';
var
 MyWorkbook: TsWorkbook;
 MyWorksheet: TsWorksheet;
 MyRPNFormula: TsRPNFormula;
 MyDir: string;
 i: Integer;
begin
 MyDir := ExtractFilePath(ParamStr(0));

 // Create the spreadsheet
 MyWorkbook := TsWorkbook.Create;
 MyWorksheet := MyWorkbook.AddWorksheet(Str_Worksheet1);

 // Write some cells
 MyWorksheet.WriteNumber(0, 0, 1.0);// A1
 MyWorksheet.WriteNumber(0, 1, 2.0);// B1
 MyWorksheet.WriteNumber(0, 2, 3.0);// C1
 MyWorksheet.WriteNumber(0, 3, 4.0);// D1
 MyWorksheet.WriteUTF8Text(4, 2, Str_Total);// C5
 MyWorksheet.WriteNumber(4, 3, 10);        // D5

{ Uncommend this to test large XLS files
 for i := 2 to 20 do
 begin
 MyWorksheet.WriteAnsiText(i, 0, ParamStr(0));
 MyWorksheet.WriteAnsiText(i, 1, ParamStr(0));
 MyWorksheet.WriteAnsiText(i, 2, ParamStr(0));
 MyWorksheet.WriteAnsiText(i, 3, ParamStr(0));
 end;
}

 // Write the formula E1 = A1 + B1
 SetLength(MyRPNFormula, 3);
 MyRPNFormula[0].ElementKind := fekCell;
 MyRPNFormula[0].Col := 0;
 MyRPNFormula[0].Row := 0;
 MyRPNFormula[1].ElementKind := fekCell;
 MyRPNFormula[1].Col := 1;
 MyRPNFormula[1].Row := 0;
 MyRPNFormula[2].ElementKind := fekAdd;
 MyWorksheet.WriteRPNFormula(0, 4, MyRPNFormula);

 // Write the formula F1 = ABS(A1)
 SetLength(MyRPNFormula, 2);
 MyRPNFormula[0].ElementKind := fekCell;
 MyRPNFormula[0].Col := 0;
 MyRPNFormula[0].Row := 0;
 MyRPNFormula[1].ElementKind := fekABS;
 MyWorksheet.WriteRPNFormula(0, 5, MyRPNFormula);

 //MyFormula.FormulaStr := '';

 // Creates a new worksheet
 MyWorksheet := MyWorkbook.AddWorksheet(Str_Worksheet2);

 // Write some string cells
 MyWorksheet.WriteUTF8Text(0, 0, Str_First);
 MyWorksheet.WriteUTF8Text(0, 1, Str_Second);
 MyWorksheet.WriteUTF8Text(0, 2, Str_Third);
 MyWorksheet.WriteUTF8Text(0, 3, Str_Fourth);
 MyWorksheet.WriteTextRotation(0, 0, rt90DegreeClockwiseRotation);

 // Save the spreadsheet to a file
 MyWorkbook.WriteToFile(MyDir + 'test2.xls', sfExcel8, False);
 MyWorkbook.Free;
end.

זה ייצוא מידע, אבל מה לגבי ייבוא מידע ?

{
excel8read.dpr

Demonstrates how to read an Excel 8.x file using the fpspreadsheet library

AUTHORS: Felipe Monteiro de Carvalho
}
program excel8read;

{$mode delphi}{$H+}

uses
 Classes, SysUtils, fpspreadsheet, xlsbiff8,
 laz_fpspreadsheet;

var
 MyWorkbook: TsWorkbook;
 MyWorksheet: TsWorksheet;
 InputFilename: string;
 MyDir: string;
 i: Integer;
 CurCell: PCell;

begin
 // Open the input file
 MyDir := ExtractFilePath(ParamStr(0));
 InputFileName := MyDir + 'test.xls';
 WriteLn('Opening input file ', InputFilename);

 // Create the spreadsheet
 MyWorkbook := TsWorkbook.Create;
 MyWorkbook.ReadFromFile(InputFilename, sfExcel8);

 MyWorksheet := MyWorkbook.GetFirstWorksheet;

 // Write all cells with contents to the console
 WriteLn('');
 WriteLn('Contents of the first worksheet of the file:');
 WriteLn('');

 CurCell := MyWorkSheet.GetFirstCell();
 for i := 0 to MyWorksheet.GetCellCount - 1 do
 begin
   WriteLn('Row: ', CurCell^.Row,
   ' Col: ', CurCell^.Col, ' Value: ',
     UTF8ToAnsi(MyWorkSheet.ReadAsUTF8Text(CurCell^.Row,
     CurCell^.Col))
    );
    CurCell := MyWorkSheet.GetNextCell();
 end;

 // Finalization
 MyWorkbook.Free;
end.

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

מחשבה אחת על “ייצוא/ייבוא מ/אל גליון אלקטרוני ומסד נתונים שלכם

  1. פינגבק: עבודה עם אקסל ורובי | לראות שונה

להשאיר תגובה

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

הלוגו של WordPress.com

אתה מגיב באמצעות חשבון WordPress.com שלך. לצאת מהמערכת / לשנות )

תמונת Twitter

אתה מגיב באמצעות חשבון Twitter שלך. לצאת מהמערכת / לשנות )

תמונת Facebook

אתה מגיב באמצעות חשבון Facebook שלך. לצאת מהמערכת / לשנות )

תמונת גוגל פלוס

אתה מגיב באמצעות חשבון Google+ שלך. לצאת מהמערכת / לשנות )

מתחבר ל-%s