Delphi Code - Add Worksheets (i.e., Tabs) within an Excel Workbook (i.e., Excel File)
Here is a simple Delphi procedure that opens an existing Microsoft Excel file and adds two new worksheets (i.e., tabs) to the workbook. One of the new worksheets added is set to become the very first tab. The other becomes the last tab. Some simple text is added to each of the new tabs. Finally, the file is saved using the same name (overwrites the original file). The most relevant parts of the code are highlighted. Comments are included to explain the code. If you copy and paste the code into your program, be sure to change the form and procedure names to match your setup. For additional Excel automation solutions, see
Microsoft Excel Automation with Delphi.
procedure TForm1.ExcelFileAddWorksheets(Sender: TObject);
var
ExcelFileName: String;
ExcelApplication, ExcelWorkbook, ExcelWorksheet: Variant;
begin
//be sure ComObj and Variants units are included in the "uses" clause
ExcelFileName := 'C:\PhysiologyWeb\delphi_code_examples\excel_file.xlsx'; //replace file name with the name of your file
ExcelApplication := Null;
ExcelWorkbook := Null;
ExcelWorksheet := Null;
try
//create Excel OLE
ExcelApplication := CreateOleObject('Excel.Application');
except
ExcelApplication := Null;
//add error/exception handling code as desired
end;
If VarIsNull(ExcelApplication) = False then
begin
try
ExcelApplication.Visible := True; //set to False if you do not want to see the activity in the background
ExcelApplication.DisplayAlerts := False; //ensures message dialogs do not interrupt the flow of your automation process. May be helpful to set to True during testing and debugging.
//Open Excel Workbook
try
ExcelWorkbook := ExcelApplication.Workbooks.Open(ExcelFileName);
//reference
//https://docs.microsoft.com/en-us/office/vba/api/excel.workbooks.open
except
ExcelWorkbook := Null;
//add error/exception handling code as desired
end;
If VarIsNull(ExcelWorkbook) = False then
begin
try
//Add a new worksheet. The new workshet becomes the first tab (from the left).
ExcelWorkbook.WorkSheets.Add(Null,Null,1,-4167);
//or
//ExcelWorkbook.WorkSheets.Add;
//reference
//https://docs.microsoft.com/en-us/office/vba/api/Excel.Worksheets.Add
ExcelWorkbook.Worksheets[1].Name := 'First Sheet'; //assumes any existing sheets do not have the same name
//add a new worksheet after the last existing worksheet in this workbook
ExcelWorkbook.WorkSheets.Add(Null,ExcelWorkbook.WorkSheets[ExcelWorkbook.Worksheets.Count],1,-4167);
ExcelWorkbook.Worksheets[ExcelWorkbook.Worksheets.Count].Name := 'Last Sheet'; //assumes any existing sheets do not have the same name
//connect to Excel Worksheet using either the ExcelApplication or ExcelWorkbook handle
ExcelWorksheet := ExcelWorkbook.WorkSheets[ExcelWorkbook.Worksheets.Count]; //gets the last worksheet in this workbook
//reference
//https://docs.microsoft.com/en-us/office/vba/api/Excel.Worksheets.Item
except
ExcelWorksheet := Null;
//add error/exception handling code as desired
end;
If VarIsNull(ExcelWorksheet) = False then
begin
ExcelWorksheet.Select;
ExcelWorksheet.Cells[1,1] := 'We created this worksheet as the last tab.'; //[row,column], in this case, text is added to Cell A1
ExcelWorksheet.Cells[2,1].Select; //selects Cell A2
end;
ExcelWorksheet := Null;
try
ExcelWorksheet := ExcelWorkbook.WorkSheets[1]; //[1] specifies the first worksheet
except
ExcelWorksheet := Null;
//add error/exception handling code as desired
end;
If VarIsNull(ExcelWorksheet) = False then
begin
ExcelWorksheet.Select;
ExcelWorksheet.Cells[1,1] := 'We created this worksheet as the first tab.'; //[row,column], in this case, text is added to Cell A1
ExcelWorksheet.Cells[2,1].Select; //selects Cell A2
end;
//now save the file
ExcelWorkbook.SaveAs(ExcelFileName);
//or
//ExcelApplication.WorkBooks[1].SaveAs(NewExcelFileName);
//Note: The file is saved using the same name. Therefore, the modified file overwrites the original one. Simply change the file name parameter to save using a different file name.
//reference
//https://docs.microsoft.com/en-us/office/vba/api/excel.workbook.saveas
end;
finally
ExcelApplication.Workbooks.Close;
ExcelApplication.DisplayAlerts := True;
ExcelApplication.Quit;
ExcelWorksheet := Unassigned;
ExcelWorkbook := Unassigned;
ExcelApplication := Unassigned;
end;
end;
end;
Posted: Friday, December 11, 2020
Last updated: Sunday, December 13, 2020