uses ..., comobj, ...; ... ... procedure TForm1.button1Click(Sender: TObject); const xlWorksheet = -4167; var myExcel, mySheet: Variant; sFileName: string; iRow: integer; begin // 若資料夾不存在, 則建立 CreateDir('C:\TEMP'); sFileName := 'C:\TEMP\test.xls'; Deletefile(sFileName); // 則已存在同名檔案, 則刪除 MyExcel := CreateOleOBject('Excel.Application'); // 新建一個 Excel 檔 MyExcel.WorkBooks.Add; // 新增活頁簿 MyExcel.Visible := true; // 程式在對 Excel 寫入資料期間, 可以看得到過程 // 若 false, 就看不到 // 指定 工作表顯示比例 mExcel.ActiveWindow.Zoom := 75; // 顯示比例為 75% MyExcel.WorkBooks[1].Saveas(sFileName); // 指定給 Excel 的檔名 Showmessage('工作表數='+IntToStr(myExcel.WorkBooks[1].WorkSheets.Count)); // 可能使用者的 Excel 預設開新檔案時自動產生多個工作表 // 但我們只想留一個工作表 // 刪除工作表 while myExcel.WorkBooks[1].WorkSheets.Count>1 do begin myExcel.WorkBooks[1].WorkSheets[1].Delete; end; // 重命名工作表 myExcel.WorkBooks[1].WorkSheets[1].Name := '公司員工'; // 新增工作表 myWorkSheets := MyExcel.WorkBooks[1].WorkSheets; myWorkSheets.Add(null, null, 新增的工作表數量, xlWorksheet); // 注意要在 const 區 或 var 區 宣告 xlWorksheet 的值 // 第 1 個參數: 新工作表要在目前哪個工作表前 // 第 2 個參數: 新工作表要在目前哪個工作表後 // 第 3 個參數: 新增工作表數量, 預設值為 1 // 第 4 個參數: xlWorksheet(工作表,-4167)、 xlChart(圖表, -4109)、 xlExcel4MacroSheet(Excel 版本 4 巨集表, 3)、 xlExcel4IntlMacroSheet(Excel 版本 4 國際巨集表, 4) iRow := 1; // 切換目前編輯的工作表 myExcel.WorkSheets[1].Activate; // 指定工作表 mySheet := myExcel.WorkBooks[1].WorkSheets[1]; mySheet.Cells[iRow,1] := '文字'; // 括號內 [橫列, 直欄] mySheet.Cells[iRow,1].Font.Bold := True; // 設定粗體字 // 合併儲存格 mySheet.Range['B1','E1'].Merge; // 另一種寫法, 好處是不用去算第 ? 欄是什麼英文字母 mySheet.Range[mySheet.Cells[1,2],mySheet.Cells[1,5]].Merge; // 輸入的資料是數字, 但要 Excel 當做文字處理(例如:電話號碼) mySheet.Cells[iRow,1] := '''0912345678'; // 可以看到該儲存格的左上角有個綠色的三角標記 // 另一種表示法 mySheet.Cells[iRow,1].NumberFormatLocal := '@'; // 指定儲存格格式為文字, 但注意要在儲存格存入值前指定 // 不然數字太大, 會馬上被轉成科學記號表示法 mySheet.Cells[iRow,1] := '0912345678'; Inc(iRow); // 移至下一列 mySheet.Cells[iRow,1] := 1; // 第一欄: A mySheet.Cells[iRow,2] := 2; // 第二欄: B mySheet.Cells[iRow,3] := 3; // 第三欄: C mySheet.Cells[iRow,4] := 4; // 第四欄: D mySheet.Cells[iRow,5] := 5; // 第五欄: E // 儲存格內寫公式 mySheet.Cells[iRow,6] := '=SUM(A'+IntToStr(iRow)+':E'+IntToStr(iRow)+')'; // 另一種表示法, 這種寫法的好處是不用去算第 ? 欄是什麼英文字母 mySheet.Cells[iRow,6] := '=SUM(R'+IntToStr(iRow)+'C1:R'+IntToStr(iRow)+'C5)'; // 給予某個儲存格別名 mySheet.Cells[iRow,6].Name := 'TotalAmount'; // 使用時機舉例 // 列數不確定 // 每列的第 1 欄為單品金額, // 第 2 欄是單品金額佔總金額的百分比, 計算公式為 第 1 欄/總金額 * 100 // 要列完所有單品金額後的下一列才會列總金額 // 這時還無法得知總金額在第幾列, 所以(以第 1 列為例) 公式可以寫 '=A1/TotalAmount' // 儲存格是數字 // 指定儲存格的格式 mySheet.Cells[iRow,6].NumberFormatLocal := '#,##0;[紅色]-#,##0'; // 數值(整數位 三位一撇),且負值時以紅色顯示, // 正, 負值表示法中間以 分號 隔開 // 而且很妙, 一定要寫中文, 若寫 [red] 程式還會掛掉 mySheet.Cells[iRow,6].NumberFormatLocal := '0.00%'; // 百分比(小數兩位) // 單一儲存格畫框線 // Borders 內的數字 5:左上右下斜線, 6:左下右上斜線, 7:左邊線, 8:上邊線, 9:下邊線, 10:右邊線, 11:垂直線, 12:水平線 mySheet.Cells[iRow,4].Borders[6].LineStyle := 1; // 1:實線, -4115:短虛線, 4:長短虛線, 5:長短短虛線, -4118:細虛線, -4119:雙實線 mySheet.Cells[iRow,4].Borders[6].Weight := 1; // 框線粗細, 數字愈大愈粗 // 指定某一區域劃框線 mySheet.Range['A1','I8'].Borders[7].LineStyle := 1; mySheet.Range['A1','I8'].Borders[8].LineStyle := 1; mySheet.Range['A1','I8'].Borders[9].LineStyle := 1; mySheet.Range['A1','I8'].Borders[10].LineStyle := 1; mySheet.Range['A1','I8'].Borders[11].LineStyle := 1; mySheet.Range['A1','I8'].Borders[12].LineStyle := 1; // 凍結窗格 mySheet.Cells[2,1].Select; // 指定要凍結的位置 myExcel.ActiveWindow.FreezePanes := true; // 最適欄寬 mySheet.Cells.EntireColumn.AutoFit; // 變更工作表名稱 mySheet.Name := '自定工作表名稱'; end;