从Excel中读取字符串信息时,字符串前有0的读出来都没有0了,100分请高手回答!急!特急!(100分)

  • 主题发起人 主题发起人 redweek
  • 开始时间 开始时间
R

redweek

Unregistered / Unconfirmed
GUEST, unregistred user!
从Excel中读取字符串信息时,Excel中字符串前有0,但是读出来给字符串变量后都没有0了。非常奇怪。请高手解答,因为字符串前的0很重要!!!!
procedure TForm_BankData.BitB_ExcelClick(Sender: TObject);
var
ExcelFile,SQLStr,getCode1,getCode2,getCode3:String;
sheet,EXCELApp,workbook : variant;
iRow,MaxRow,getAno:integer;
begin
try
//....创建OLE对象............
EXCELApp:=createOleObject('Excel.Application');
EXCELApp.displayAlerts:=false;
EXCELApp.ScreenUpdating:=false;
EXCELApp.WorkBooks.Add(ExcelFile);
workbook := EXCELApp.workbooks[1];
sheet:=workbook.worksheets[1];
//....取得最大行数 maxRow .........
EXCELApp.ActiveCell.SpecialCells(xlLastCell).Select;
maxRow:=EXCELApp.ActiveCell.Row; //最大行数
With Datamodul do
begin
for iRow:=4 to MaxRow do
begin
sheet.cells[iRow,10].WrapText := True;
getCode1:=sheet.cells[iRow,1]; //....下面三行出问题Excel中是'0425678',读出的getCode1内容是'425678',前面的0没有了,为什么?
getCode2:=sheet.cells[iRow,2];
//....下面三行出问题Excel中是'098765',读出的getCode1内容是'98765',前面的0没有了,为什么?
getCode3:=sheet.cells[iRow,3];
SQLStr:='Insert Into ExcelInfo(code1,code2,code3) Values('''+getCode1+''','''+getCode2+''','''+getCode3+''')';
InsertTable.Close;
InsertTable.SQL.Clear;
InsertTable.SQL.Add(SQLStr) ;
InsertTable.Prepare;
InsertTable.ExecSQL;
InsertTable.Close;

end;
//................................................
Tab_Excel.Close;
Tab_Excel.Open;
end;
finally
if not VarIsEmpty(EXCELApp) then
begin //释放对象
EXCELApp.displayAlerts:=false;
EXCELApp.ScreenUpdating:=true;
EXCELApp.quit;
end;
//.......释放对象...........
EXCELApp.displayAlerts:=false;
EXCELApp.ScreenUpdating:=true;
EXCELApp.quit;
screen.Cursor:=crDefault;
end;
end;
 
在每个数值型值前面加前导“'”既可!
 
先SHOWMESSAGE 一下getCode1的值
 
To SiWeiLiuLang:" 先SHOWMESSAGE 一下getCode1的值",显示出来的getCode1是‘98765’,前面的‘0’没有了!

To Johnny_du: 怎么在"每个数值型值前面加前导“'”既可!" ??

请详细说明! 谢谢,也请其他朋友回答!
 
我认为没有办法:
因为你的excel该单元格的格式为数值型,转到任何地方,以及通过程序showmessage该值也是去0的。
前面Johnny_du说在前面加前导“'”既可!这也只适用于该列不是数值型的情况。加"'"后该0也会被去掉。
 
以前碰到过类似的问题,
excel中读到delphi中已经经过类型转换,前面的0在转换中已经丢失
 
to dfw001:
肯定是有办法的,只要在读之前编程让Excel中某列变成字符型就可以了。
我知道把数据库里的数据写Excel文件可以,但不知道从excel中读某列时该如何设置某列成字符型,才能使读出来的字符前面的0不丢失!!!请有经验的高手帮忙!!!解答。非常谢谢!!!
 
顶起来!!!!!!!!
 
用 连接字符串 连接excel 试试,应该没问题. (在设置连接excel的连接串时,可以有参数设置文本属性的)
 
先SHOWMESSAGE 一下getCode1的值 ,试一下!
 
To xj_lq: 请朋友说具体一点,谢谢!
(用 连接字符串 连接excel 试试,应该没问题. (在设置连接excel的连接串时,可以有参数设置文本属性的)
 
连接串例子: 'Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source=
文件名;Mode=Read;Extended Properties="Excel 8.0;IMEX=1;";Jet OLEDB:System database="";Jet OLEDB:Registry Path=""; Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=35;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False'
 
还是不行啊。

高手们还有没有其他办法?
 
怎么不行,我们就是这么用的,没有任何问题,数据都当作文本类型来读的
检查你的excel 本来数据是否有问题...
 
試一下
getCode1:=''''+sheet.cells[iRow,1];
原來有試過從delphi導出到excel有這樣的問題,就是這樣處理的
sheet.cells[iRow,1]:=''''+field[0].value
 
ExcelWOrkSheet1.Cells.Item[row,3].WrapText := True; //...该列转换成文本...
ExcelWOrkSheet1.Cells.Item[row,3].HorizontalAlignment:=xlLeft; //...左对齐.......
ExcelWOrkSheet1.Cells.Item[row,3].NumberFormat:='@'; //...数字的格式转换成文本

我知道在写数据入Excel文件时候,可以按上面操作,但我不知道从excel中读的时候怎么设置??才能使读出来的字符前面的0不丢失!!!请有经验的高手帮忙!!!解答。非常谢谢!!!
To qis2000 :你的办法也不行!!
 
据我所知需要设置excel的列为文本形式就能读出0了
 
帮顶!

http://www.source520.com

站长开发推广同盟 站长朋友的终极驿站
同时拥有海量源码电子经典书籍下载

http://www.source520.com/search/search.asp

"编程.站长"论坛搜索引擎-----为中国站长注入动力!
 
你可以把你的excel发过来看看吗?
 
后退
顶部