100分求教: 多条记录导入 Excel的问题。。。。。。。。。。。分不够再加
我的记录结构:
ID 性名 性别 地址 ID2
导出到Excel的结构:
性名 性别 地址 年龄 备注
要一条一条的导入!!!
请各位高手详细说明一下,我是菜菜。。。谢谢了。。。
问题点数:100、回复次数:8Top
1 楼yesania(yesania)回复于 2005-04-04 17:08:45 得分 10
先用query把要插入的数据选出来,放个支持excel的控件,(ExpressSpreadSheet或者XLGrid),然后
循环数据集,再循环里写上Cell[XXX] := XXXField.Value就可以了,循环结束后可以写上导出excel的代码
或者更省事直接用个cxGrid,直接一句话导出成excel。。。看你自己了Top
2 楼haohua(渴望成为高手的--菜鸟)回复于 2005-04-04 17:26:14 得分 0
不能用query
我是用DBGird显示的,用户可以多选记录,我再把用户选了的记录导出,
所以不知道怎么作,郁闷。。。。。。。。Top
3 楼phoebuswu(執子之手,與子偕老!)回复于 2005-04-04 17:44:41 得分 20
procedure TIMCSFormTop.ExportToExcel(const sExcelFileName: string;
const cxgvMain: TcxGridDBTableView);
var
eclApp,WorkBook: Variant;
nRowCount, nColumnCount, i,j,RowIND: integer;
begin
try
eclApp := CreateOleObject('Excel.Application');
WorkBook := CreateOleObject('Excel.Sheet');
WorkBook := eclApp.WorkBooks.add;
nColumnCount := cxgvMain.ColumnCount;
for i := 0 to nColumnCount - 1 do
eclApp.Cells(1,i + 1) := cxgvMain.Columns[i].Caption;
RowIND := 0;
with cxgvMain.ViewData do
begin
nRowCount := RowCount;
for i := 0 to nRowCount - 1 do
begin
if cxgvMain.ViewData.Rows[i].IsData then
begin
for j := 1 to nColumnCount do
eclApp.Cells(RowIND + 2,j) :=Rows[i].DisplayTexts[j - 1];
RowIND := RowIND + 1 ;
end;
end;
end;
WorkBook.Saveas(sExcelFileName);
WorkBook.close;
Showmessage('Save Success!');
except
ShowMessage('Save to Excel Failed!');
end;
以上程序是將cxgrid的内容輸出到excel中,你將那些Rows[i].DisplayTexts[j - 1]改爲dbgrid的相關設定就差不多了,自己再測試一下
Top
4 楼xiaonanw(小南)回复于 2005-04-04 20:20:27 得分 0
excelworksheet1.Cells.Item[zongshu,1].FormulaR1C1 :=xuhao;
excelworksheet1.Cells.Item[zongshu,2].FormulaR1C1 :=dbgrid1.Columns.Items[0].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,3].FormulaR1C1 :=dbgrid1.Columns.Items[1].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,4].FormulaR1C1 :='动态'; //计量方式
excelworksheet1.Cells.Item[zongshu,5].FormulaR1C1 :='流量计';
excelworksheet1.Cells.Item[zongshu,6].FormulaR1C1 :=dbgrid1.Columns.Items[2].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,7].FormulaR1C1 :=dbgrid1.Columns.Items[3].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,8].FormulaR1C1 :=dbgrid1.Columns.Items[4].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,9].FormulaR1C1 :=dbgrid1.Columns.Items[5].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,10].FormulaR1C1 :=dbgrid1.Columns.Items[6].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,11].FormulaR1C1 :=dbgrid1.Columns.Items[7].Field.asvariant;
excelworksheet1.Cells.Item[zongshu,12].FormulaR1C1 :=dbgrid1.Columns.Items[8].Field.asvariant;
这是我以前写的,你可以参考,Top
5 楼haohua(渴望成为高手的--菜鸟)回复于 2005-04-05 13:57:35 得分 0
各们高手能不能在代码后加上注释。
有的不懂呀。。。
谢谢了。。。。。。。。。Top
6 楼xiaonanw(小南)回复于 2005-04-10 10:39:57 得分 70
excelworksheet1.Cells.Item[1,1].FormulaR1C1 :=xuhao; //单元格[1,1]的值为xuhao
excelworksheet1.Cells.Item[1,2].FormulaR1C1 :=dbgrid1.Columns.Items[0].Field.asvariant;
//单元格[1,2]的值为dbgrid当前记录的第一列值
excelworksheet1.Cells.Item[1,3].FormulaR1C1 :=dbgrid1.Columns.Items[1].Field.asvariant;
excelworksheet1.Cells.Item[1,4].FormulaR1C1 :='动态'; //计量方式excelworksheet1.Cells.Item[1,5].FormulaR1C1 :='流量计';
excelworksheet1.Cells.Item[1,6].FormulaR1C1 :=dbgrid1.Columns.Items[2].Field.asvariant;
excelworksheet1.Cells.Item[1,7].FormulaR1C1 :=dbgrid1.Columns.Items[3].Field.asvariant;
excelworksheet1.Cells.Item[1,8].FormulaR1C1 :=dbgrid1.Columns.Items[4].Field.asvariant;
excelworksheet1.Cells.Item[1,9].FormulaR1C1 :=dbgrid1.Columns.Items[5].Field.asvariant;
excelworksheet1.Cells.Item[1,10].FormulaR1C1 :=dbgrid1.Columns.Items[6].Field.asvariant;
excelworksheet1.Cells.Item[1,11].FormulaR1C1 :=dbgrid1.Columns.Items[7].Field.asvariant;
excelworksheet1.Cells.Item[1,12].FormulaR1C1 :=dbgrid1.Columns.Items[8].Field.asvariant;
前两句给你注释了,剩下的基本一样,你应该能看懂了吧Top
7 楼xiaonanw(小南)回复于 2005-04-10 10:42:25 得分 0
写完一条记录,让dbgrid走到下一条记录,再循环“写excel”语句,就可以把多条都写到excel里了
Top
8 楼haohua(渴望成为高手的--菜鸟)回复于 2005-04-13 14:55:17 得分 0
xiaonanw(小南)
非常感谢。。。。。。
我慢慢看一下。Top




