我用delphi第三方控件DataSetToExcel把查询结果从Oracle导出到Excel
查询结果为:
合同编号楼层 单元 开始日期 结束日期 最后付款日期
A12899 1G 1GS041 01-04-2012 30-04-2012 30-04-2012
A12902 15 15009 01-04-2012 30-04-2012 15-04-2012
A12907 11 11005B 01-04-2012 30-04-2012 30-04-2012
A12908 11 11001J 01-04-2012 30-04-2012 30-04-2012
A12911 15 15045 01-04-2012 30-04-2012 30-04-2012
A12911 15 15045 01-04-2012 30-04-2012 30-04-2012当使用控件导出到Excel时,日期格式就变成了
A12482 13 13091 4/1/2012 30/04/2012
A12483 13 13092 4/1/2012 30/04/2012
A12489 13 13104A 4/1/2012 30/04/2012
A12490 13 13104B 4/1/2012 30/04/2012
A12491 13 13105 4/1/2012 30/04/2012
A12494 13 13109 4/1/2012 30/04/2012不仅是日期格式和日期都不正确了,有朋友遇到这样的问题吗?如何解决?
查询结果为:
合同编号楼层 单元 开始日期 结束日期 最后付款日期
A12899 1G 1GS041 01-04-2012 30-04-2012 30-04-2012
A12902 15 15009 01-04-2012 30-04-2012 15-04-2012
A12907 11 11005B 01-04-2012 30-04-2012 30-04-2012
A12908 11 11001J 01-04-2012 30-04-2012 30-04-2012
A12911 15 15045 01-04-2012 30-04-2012 30-04-2012
A12911 15 15045 01-04-2012 30-04-2012 30-04-2012当使用控件导出到Excel时,日期格式就变成了
A12482 13 13091 4/1/2012 30/04/2012
A12483 13 13092 4/1/2012 30/04/2012
A12489 13 13104A 4/1/2012 30/04/2012
A12490 13 13104B 4/1/2012 30/04/2012
A12491 13 13105 4/1/2012 30/04/2012
A12494 13 13109 4/1/2012 30/04/2012不仅是日期格式和日期都不正确了,有朋友遇到这样的问题吗?如何解决?
解决方案 »
- Delphi编写windows应用程序,writeln函数不能使用
- 自己分析了Client和Cerver连接后的问题(麻烦牛人们进来指教指教!最好详细点!)
- 急!!那位专家给解一解
- 小儿科的问题。。
- 关于用DBGrid显示和回写的问题!请大伙帮忙啊~
- 请教如何取得线程的状态(NtQuerySystemInformation)?
- 请问Delphi7的内部版本号,D6是140..
- 关于两表之间复制的问题
- 子窗體設置成最大化在顯示時有一個從小到大的閃爍現象怎樣解決?
- 在STRINGGRID中如何判断用户是否选中了一行啊。
- deplhi 如何通过treeNode的data属性来查找treeview对应的treeNode
- 有没有好用的播放 flv 视频的 控件 或者其他方案
控制面板->区域和语言选项->区域选项[选项卡中]->自定义->日期[选项卡中]
设置你需要的时间格式试一试。
控制面板->区域和语言选项->区域选项[选项卡中]->自定义->日期[选项卡中]
设置你需要的时间格式试一试。
这个跟电脑的操作系统的版本,和设置的区域和语言选项有关。你可以试着换一台电脑试下。
默认情况下 UK 和 US 的short formatting 月和日就是反过来的
我平常都是自己写代码导入excel的。
1:设置excel单元格range的format,设置成你想要的日期格式,在deiphi中访问range的value是variant类型的属性,给他赋值的时候直接赋给它一个日期类型的值
2:在给range的value赋值时,赋的是日期字符串,该字符串已经是format成你指定的格式
3:可以对range赋值,赋的是variant array,你在生成variant array时就将日期部分写成字符串你在oracle中查看到的日期格式 是数据库默认的日期格式 转换成string 显示在终端的
1:设置excel单元格range的format,设置成你想要的日期格式,在delphi中访问range的value是variant类型的属性,给他赋值的时候直接赋给它一个日期类型的值
2:在给range的value赋值时,赋的是日期字符串,该字符串已经是format成你指定的格式
3:可以对range赋值,赋的是variant array,你在生成variant array时就将日期部分写成字符串你在oracle中查看到的日期格式 是数据库默认的日期格式 转换成string 显示在终端的
procedure SetFileName;
var fn:TSaveDialog;
msgID:integer;
begin
fn:=TSaveDialog.Create(self);
fn.Filter := 'Excel文件|*.xls';
if not fn.Execute then
Abort;
FileName:=fn.FileName;
if FileExists(FileName) then
begin
msgID := MessageBox(0,'文件已经存在,是否覆盖旧文件?','找到旧文件',MB_YESNOCANCEL+MB_ICONQUESTION+MB_DEFBUTTON1);
case msgID of
IDYES:deletefile(FileName);
IDNO:SetFileName;
IDCANCEL:Abort;
end;
end;
fn.Free;
fn := nil;
end;
var XLApp,Sheet:variant;
i,j:integer;
begin
if not Assigned(FDataSet) then
Raise Exception.Create('请设置要转出的数据集!');
if (not FDataSet.Active) or (FDataSet.IsEmpty) then
Raise Exception.Create('没有数据可以转出!'); SetFileName;
try
XLApp := CreateOleObject('Excel.Application');
XLApp.visible := False;
XLApp.workbooks.Add(xlWBatWorkSheet);
if Trim(FSheetName)='' then
FSheetName:='From Delphi App';
XLApp.workbooks[1].workSheets[1].Name:=FSheetName;
Sheet:=XLApp.Workbooks[1].WorkSheets[FSheetName];
for i:= 0 to FDataSet.FieldCount -1 do
Sheet.Cells[1,i+1] := FDataSet.Fields[i].DisplayName;
frmProgress.Show;
j:=2;
FDataSet.DisableControls;
FDataSet.First;
while not FDataSet.Eof do
begin
for i := 1 to FDataSet.FieldCount do
begin
Sheet.Cells[j,i] := FDataSet.Fields[i-1].AsString;
StepProgress;
end;
FDataSet.Next;
Inc(j);
end;
XLApp.ActiveWorkbook.SaveAs(FileName, xlNormal, '','',False, False);
finally
XLApp.Quit;
frmProgress.Free;
frmProgress:=nil;
end;
end;
Sheet.Cells[j,i] := FDataSet.Fields[i-1].AsString;这样也是不可以的,因为Excel会识别到,如果传入的是一个日期字符串,他会自动转成日期类型,按照日期格式显示的,如果你一定要传入字符串,且按照字符串原样显示的话,可以写成
if 日期字段 then
Sheet.Cells[j,i] := ''''+FormatDateTime('dd-MM-yyyy', FDataSet.Fields[i-1].AsDateTime);注意,在字符串前面加上一个单引号‘是为了让Excel强制将值当成string来显示和处理
begin
for i := 1 to FDataSet.FieldCount do
begin
Sheet.Cells[j,i] := FDataSet.Fields[i-1].AsString;
if 日期字段 then
Sheet.Cells[j,i] := ''''+FormatDateTime('dd-MM-yyyy', FDataSet.Fields[i-1].AsDateTime);
StepProgress;
end;
FDataSet.Next;
Inc(j);
end;
这个日期字段是 什么条件?还是具体是哪一列?
j=1
while not FDataSet.Eof do
begin
for i := 1 to FDataSet.FieldCount do
begin
if (i=2)or(i=3) then //假设第二三列是日期字段
Sheet.Cells[j,i] := ''''+FormatDateTime('dd-MM-yyyy', FDataSet.Fields[i-1].AsDateTime); // 这里不是两个双引号 是 四个单引号 表示添加一个单引号
StepProgress;
end;
FDataSet.Next;
Inc(j);
end;