delphi7导入导出求助 本人刚学delphi不久,现在要求用delphi7写一个oracle导入导出的工具,要求把一张excel表直接导入数据库,并且要有字段的检查,是否匹配,如果一行记录与数据库中的记录主键相同则覆盖它,否则添加到数据库中;导出则要求它的字段宽度与在数据库中的表的字段宽度一样,且可以导出某些字段,即要的字段。 希望有高手指教,不胜感激,急啊,谢谢。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 导入var AStrID : String; ARow,ACol,i,j,AMaxCol : Integer;begin AMaxCol := Col; StringGrid.ColCount := 1; StringGrid.RowCount := 1; FExcelApp := Unassigned; FExcelApp := CreateOleObject('Excel.Application'); FWorkBook := CreateOleObject('Excel.Sheet'); try FWorkBook := FExcelApp.WorkBooks.Open(FileName); FWSheet := FWorkBook.Sheets[1]; ARow := 1; ACol := 1; AStrID := FWSheet.cells[ARow,CheckCol].value; PlShowMsg.Visible := True; // FMaxRow := GetMaxRow(FWorkBook.Worksheets[1].UsedRange.Rows.Count); while AStrID<>'' do begin PlShowMsg.Caption := '导入条数...'+IntToStr(ARow); Application.ProcessMessages; if ARow>1 then StringGrid.Cells[0,ARow-1] := IntToStr(ARow-1); for ACol:=1 to AMaxCol do begin StringGrid.Cells[ACol,ARow-1] := FWSheet.cells[ARow,ACol].value; end; Inc(ARow); AStrID := FWSheet.cells[ARow,CheckCol].value; end; StringGrid.ColCount := AMaxCol+1; StringGrid.RowCount := ARow; PlShowMsg.Visible := False; finally FWorkBook := Unassigned; FExcelApp.WorkBooks.Close; FExcelApp.Quit; FExcelApp := Unassigned; end;导出 FExcelApp := Unassigned; FExcelApp := CreateOleObject('Excel.Application'); FWorkBook := CreateOleObject('Excel.Sheet'); try FWorkbook := FExcelApp.WorkBooks.Add; FWSheet := FWorkBook.ActiveSheet; ARow := 1; ACol := 1; PlShowMsg.Visible := True; // 写入数据到Excel中 for ARow := 0 to StringGrid.RowCount-1 do begin PlShowMsg.Caption := '导入条件...'+IntToStr(ARow+1); Application.ProcessMessages; for ACol := 1 to StringGrid.ColCount-1 do begin FWSheet.cells[ARow+1,ACol].value := StringGrid.Cells[ACol,ARow]; end; end; PlShowMsg.Visible := False; ATXT := 'D:D';//字段宽度 FWSheet.Columns[ATXT ].ColumnWidth := 12.63;// ATXT := 'A:N';// FWSheet.Range[ATXT].Select;// FWSheet.Range[ATXT].Colu.AutoFit; // FWSheet.Select; // FWSheet.EntireColumn.AutoFit; FWorkBook.WorkSheets[1].SaveAs(SaveFilaName); FWorkBook.Save; finally FworkBook.Saved := True; FExcelApp.WorkBooks.Close; FExcelApp.Quit; FExcelApp := Unassigned; end; 只提供参考 1、如果Excel表是简单列表,可以通过ADO连接当作一张普通数据库表用SQL语句来读取和写入2、如果Excel表格式要求较多,比如有合并单元格、字体格式等需求,则建议通过Excel的OLE接口实现3、“字段宽度一样”是指显示格式? 修改exe文件的图标 如何将xls文件,用RxRichedit显示出来 如何让DBGRID单元格中的超长内容折行显示 怎么在线程里显示模式窗体? 这种图表能不能做? ★★★散分了,今天高兴,涨了5分信誉分★★★ 一小段代码,一周没有搞定了,哪位大侠帮忙看看,程序为什么在执行的时候出错呢? 如何动态设计报表打印dbgrideh中的字段内容???来者有分!!! DBF文件用SQL命令导入SQL数据库,出现空日期要如何处理? 请教一个三层结构的简单问题 求高手开阔下思路:两个数组不一样长,取出不一样的元素 如何捕获stack overflow错误?
AStrID : String;
ARow,ACol,i,j,AMaxCol : Integer;
begin
AMaxCol := Col;
StringGrid.ColCount := 1;
StringGrid.RowCount := 1;
FExcelApp := Unassigned;
FExcelApp := CreateOleObject('Excel.Application');
FWorkBook := CreateOleObject('Excel.Sheet');
try
FWorkBook := FExcelApp.WorkBooks.Open(FileName);
FWSheet := FWorkBook.Sheets[1];
ARow := 1;
ACol := 1;
AStrID := FWSheet.cells[ARow,CheckCol].value;
PlShowMsg.Visible := True;
// FMaxRow := GetMaxRow(FWorkBook.Worksheets[1].UsedRange.Rows.Count);
while AStrID<>'' do
begin
PlShowMsg.Caption := '导入条数...'+IntToStr(ARow);
Application.ProcessMessages;
if ARow>1 then
StringGrid.Cells[0,ARow-1] := IntToStr(ARow-1);
for ACol:=1 to AMaxCol do
begin
StringGrid.Cells[ACol,ARow-1] := FWSheet.cells[ARow,ACol].value;
end;
Inc(ARow); AStrID := FWSheet.cells[ARow,CheckCol].value;
end;
StringGrid.ColCount := AMaxCol+1;
StringGrid.RowCount := ARow;
PlShowMsg.Visible := False;
finally
FWorkBook := Unassigned;
FExcelApp.WorkBooks.Close;
FExcelApp.Quit;
FExcelApp := Unassigned;
end;
导出 FExcelApp := Unassigned;
FExcelApp := CreateOleObject('Excel.Application');
FWorkBook := CreateOleObject('Excel.Sheet');
try
FWorkbook := FExcelApp.WorkBooks.Add;
FWSheet := FWorkBook.ActiveSheet;
ARow := 1;
ACol := 1;
PlShowMsg.Visible := True;
// 写入数据到Excel中
for ARow := 0 to StringGrid.RowCount-1 do
begin
PlShowMsg.Caption := '导入条件...'+IntToStr(ARow+1);
Application.ProcessMessages;
for ACol := 1 to StringGrid.ColCount-1 do
begin
FWSheet.cells[ARow+1,ACol].value := StringGrid.Cells[ACol,ARow];
end;
end;
PlShowMsg.Visible := False;
ATXT := 'D:D';
//字段宽度
FWSheet.Columns[ATXT ].ColumnWidth := 12.63;
// ATXT := 'A:N';
// FWSheet.Range[ATXT].Select;
// FWSheet.Range[ATXT].Colu.AutoFit;
// FWSheet.Select;
// FWSheet.EntireColumn.AutoFit;
FWorkBook.WorkSheets[1].SaveAs(SaveFilaName);
FWorkBook.Save;
finally
FworkBook.Saved := True;
FExcelApp.WorkBooks.Close;
FExcelApp.Quit;
FExcelApp := Unassigned;
end;
只提供参考
2、如果Excel表格式要求较多,比如有合并单元格、字体格式等需求,则建议通过Excel的OLE接口实现
3、“字段宽度一样”是指显示格式?