help!!!!!怎么解决比较大的文本类型数据如身份证号码,通过程序转换到Excel后变成科学技术法了,而且... (30分)

  • 主题发起人 ljinhong
  • 开始时间
L

ljinhong

Unregistered / Unconfirmed
GUEST, unregistred user!
我这里有比较大的文本数据如身份证号码420802197212157070,通过程序
转换到Excel后变成科学技术法了(4.2E+17),而且打开EXCEL转换成需要的
显示数字时,数字变成4208031197212100000,请问怎么解决到电子表格中的
显示直接就是420802197212157070。
 
在身份证号码前加'号,就可以了。
 
谢谢ericimex01的回答。可我写的是一个比较通用的打开数据库的程序,在选择任何一个表,
然后选择的任何几个字段然后生成EXCEl,所以不可能单独去识别是
不是身份证字段,如果其他字段也有类似的情况怎么办?
 
有一个办法,就是在写数据之前,将EXCEL单元格格式变成文本.以下是EXCEL中的宏,试试吧.
Columns("A:E").Select
Selection.NumberFormatLocal = "@"
 
谢谢MichaelZhu,我想你的答案肯定能实现,但我试了没有弄出来,用Columns("A:E").Select
Selection.NumberFormatLocal = "@"这个没成功,
帮忙看一下,RangeE := ExcelApplication1.Range ['A1', 'e10'];
RangeE.columns.select;
RangeE.Select.NumberFormatLocal :='@';
看是否在语法上有没有问题
 
ExcelApplication1.Range ['A1', 'A100'].NumberFormatlocal:='000000';
 
ExcelWorksheet.Cells.Item[iRow, iCol].NumberFormatLocal := '@';
 
手边没有Delphi,不能测试。不过有个折中的办法,你可以做一个模板。模板的单元格
格式是文本。
 
ExcelObject.ActiveSheet.Columns[n].NumberFormatLocal := '@'
可以改变第n列的显示格式。
 
下面是我写的一个过程将数据库的数据导到EXCEL中,你可以借鉴一下
PROCEDURE getdatefromdbintoexcel(dataset:tdataset;dbgrid:tdbgrid;title:string);
var i,row,column:integer;
CELLESRANGE,X1:OLEVARIANT;
ASCCOLS:CHAR;
begin
Try
ExcelApplication1.Connect;
Except
MessageDlg('Excel 可能没有安装!',
mtError, [mbOk], 0);
Abort;
end;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:='Excel Application';
ExcelApplication1.Workbooks.Add(Null,0);
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);
ExcelWorksheet1.ConnectTo
(ExcelWorkbook1.Worksheets[1] as _Worksheet);
row:=1;
ExcelWorksheet1.Cells.Item[row,1]:=title;
//一共有多少列
ASCCOLS:=CHAR(dbgrid.Columns.Count+64);
ExcelWorksheet1.Range['A1',ASCCOLS+'1'].Merge(X1);
ExcelWorksheet1.Range['A1',ASCCOLS+'1'].HorizontalAlignment:=xlCenter;
row:=2;
for i:=0 to dbgrid.Columns.Count-1 do
ExcelWorksheet1.Cells.Item[row,i+1]:=dbgrid.Columns.Title.Caption;
row:=3;
While Not(dataset.Eof) do
begin
column:=1;
for i:=1 to dataset.FieldCount do
begin
ExcelWorksheet1.Cells.Item[row,column]:=dataset.fields[i-1].AsString;
column:=column+1;
end;
dataset.Next;
row:=row+1;
end;
//设置自动适应列宽
with ExcelWorksheet1.Range['A2',ASCCOLS+INTTOSTR(2+DATASET.RECORDCOUNT)] do
begin
Columns.AutoFit;
//设置边线
Borders.LineStyle:=xlcontinuous;
Borders.weight:=xlthin;
Borders.colorindex:=xlautomatic;
end;
//设置TITLE行高 AND FONTS
ExcelWorksheet1.Range['A1','A1'].RowHeight:=28;
ExcelWorksheet1.Cells.Item[1,1].FONT.NAME:='黑体';
ExcelWorksheet1.Cells.Item[1,1].FONT.size:=20;
ExcelWorksheet1.PageSetup.RightFooter:='&9第&P页 共&N页';
ExcelWorksheet1.PageSetup.PrintTitleRows:='$1:$2';
// 设置单元格格式
for i:=1 to dataset.FieldCount do
begin
ASCCOLS:=CHAR(I+64);
if dataset.fields[i-1].DataType in [ftUnknown,ftstring] then
ExcelWorksheet1.Range[ASCCOLS+'3',ASCCOLS+INTTOSTR(2+dataset.RecordCount)].NumberFormatLocal:='000000';
// if dataset.fields[i-1].fieldtype in [ftUnknown,ftstring] then
// ExcelWorksheet1.Range[ASCCOLS+'3',ASCCOLS+INTTOSTR(2+dataset.RecordCount)].NumberFormatLocal:='000000';
end;

ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
end;
 
非常谢谢大家
 
顶部