procedure TMainForm.ImportExcel();
var
i:integer;
strErr:string;
strFileName,strSheetName:string;
excelHande:TExcelHandling;
startRow,endRow,startColumn:Integer;
ExcelToTablePlan: TExcelToTable;
begin
try
if dlgOpen.Execute then
begin
InDataSetBroker.DataSet.Open;
InDataSetBroker.DataSet.EmptyDataSet;
docMoldPlanList.DataGrid.Cursor:=Business.Forms.Controls.crAppStart;
dlgOpen.Filter := 'Excel 97-2003 工作簿(*.xls)|*.xls|Excel 2007 工作薄(*.xlsx)|*.xlsx';
dlgOpen.Title := '请选择要导入的计划数据文件';
strFileName:=dlgOpen.FileName;
//读Excel的工作簿名称
try
excelHande:=TExcelHandling.Create(strFileName);
strSheetName := excelHande.ActiveSheetName;
excelHande.AvailableRowsCount(strSheetName);
startRow := excelhande.AvailableStartRow;
endRow := startRow + excelHande.AvailableRowCount -1;
startColumn:=excelHande.AvailableStartColumn;
finally
excelHande.Free;
end;
try
//为解决多次导入sheet名称不同的excel时导入控件报错的问题,每次导入创建新控件
ExcelToTablePlan:=TExcelToTable.Create(self);
ExcelToTablePlan.FileName:=strFileName;
ExcelToTablePlan.DataSource:=InDataSetBroker;
ExcelToTablePlan.StartRow:=startRow;
ExcelToTablePlan.EndRow:=endRow;
//设置EXCEL的映射关系
ExcelToTablePlan.FieldMap.Clear;
for i:=1 to 100 do
begin
ExcelToTablePlan.FieldMap.Add('DataSetInDataSet.YHZD'+SysUtils.IntToStr(i)+'='+strSheetName+'['+SysUtils.IntToStr(startColumn-1+i)+',0]');
end;
ExcelToTablePlan.Execute(strErr);
if strErr<>'' then
jsdialogs.ShowMsg(strErr,'');
finally
ExcelToTablePlan.Free;
end;
SetUpMakeAddress(InDataSetBroker.DataSet);
docMoldPlanList.ImportToUserDS(InDataSetBroker.DataSet);
docMoldPlanList.DataGrid.Cursor:=Business.Forms.Controls.crDefault;
docMoldPlanList.ValidateData(lvwError);
end;
Except
dialogs.ShowMessage('导入格式不正确');
InDataSetBroker.DataSet.EmptyDataSet;
end;
end; |