找回密码
 加入
搜索
查看: 16882|回复: 23

[效率算法] Excel复制数据格式怎样保持不变?[已解决]

 火.. [复制链接]
发表于 2012-12-8 23:36:57 | 显示全部楼层 |阅读模式
本帖最后由 blue_dvd 于 2012-12-12 08:36 编辑

源码如下:
Local $sFilePath1 = FileOpenDialog("选择导入电子表格文件", @ScriptDir & "", "Microsoft Excel 工作薄 (*.xls)", 1 + 2 + 4)
$oexcel=ObjCreate("excel.application") ;创建excel进程
$oexcel.visible=False  ;隐藏进程界面,可以提高处理速度
$wb=$oexcel.workbooks.open($sFilePath1)  ;打开选定工作簿
$arr=$wb.worksheets(1).usedrange.value 
 $wb.worksheets(2).range("a1").resize(UBound($arr,2),UBound($arr)).value=$arr  ;结果写入工作簿第二个工作表
 $wb.close(true)  ;保存并关闭工作簿(参数true代表保存)
    $oexcel.quit  ;退出excel进程
MsgBox(0,"","处理完成!")
测试数据见附件

发现身份证数据复制后再存入则变为科学计数法,而且后三位变成了0,请高手帮忙解决一下,谢谢了!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-12-8 23:42:32 | 显示全部楼层
更奇怪的是:双击原表格中身份证的数据,立刻就变成了上述情况,都不知道原表怎样生成的?
发表于 2012-12-8 23:58:33 | 显示全部楼层
设置成文本格式或者在前面加入半角逗号~~
 楼主| 发表于 2012-12-9 00:05:39 | 显示全部楼层
回复 3# annybaby
除了把源文件数据改为文本外
用什么语句可以实现设置文本,写入表格中?
发表于 2012-12-9 09:57:58 | 显示全部楼层
with $wb.worksheets(2).range("a1").resize(UBound($arr,2),UBound($arr))
    .numberformatlocal="@"    
    .value=$arr
endwith
写入那句改成这样试下

评分

参与人数 1金钱 +20 贡献 +5 收起 理由
lpxx + 20 + 5 学习了

查看全部评分

发表于 2012-12-9 14:50:27 | 显示全部楼层
本帖最后由 netegg 于 2012-12-9 19:39 编辑

[au3]#include <Excel.au3>

Local $oExcel = _ExcelBookNew() ;Create new book, make it visible

; We can fill-up some cells using a simple loop and random Numbers
For $y = 1 To 5
        For $x = 1 To 5
                _ExcelWriteCell($oExcel, Random(100000000000000000, 900000000000000000), $x, $y) ;Some random numbers to file
        Next
Next

$sFormat = "##################" ;Format String tells _ExcelNumberFormat to make it a string
_ExcelNumberFormat($oExcel, $sFormat, 1, 1, 5, 5) ;Start on Row 1, Start on Column 1, End on Row 5, End on Column 5

MsgBox(0, "Exiting", "Press OK to Save File and Exit")
_ExcelBookSaveAs($oExcel, @TempDir & "\Temp.xls", "xls", 0, 1) ; Now we save it into the temp directory; overwrite existing file if necessary
_ExcelBookClose($oExcel) ; And finally we close out
fileclose(@TempDir & "\Temp.xls")
filedelete(@TempDir & "\Temp.xls")
[/au3]
 楼主| 发表于 2012-12-9 21:55:30 | 显示全部楼层
回复 5# kevinch
这句话太神了,结果正确
.numberformatlocal="@"   
这句是什么意思?
 楼主| 发表于 2012-12-9 22:03:15 | 显示全部楼层
回复 6# netegg
蛋大!你的代码不行哦!后面还是三个0!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
发表于 2012-12-9 22:44:35 | 显示全部楼层
进来学习了.
发表于 2012-12-9 22:54:59 | 显示全部楼层
本帖最后由 netegg 于 2012-12-9 23:10 编辑

回复 8# blue_dvd

你这个身份证是几代的号?少位吧?把#写成和数字长度相同的个数就行了
不对了,可能还是格式的事
 楼主| 发表于 2012-12-9 23:23:46 | 显示全部楼层
回复 10# netegg
二代的号,18位的!
发表于 2012-12-10 02:28:23 | 显示全部楼层
本帖最后由 netegg 于 2012-12-10 02:51 编辑

回复 11# blue_dvd
不对了,那不是填写excel的事,是autoit对数字的识别的问题,你用random出来之后,只认到15位,后面自动转科学计数了
不对还是填excel的事,不认,看看excel关于数字的自定义格式,只到15位,后面的为0,起码我这是,office2013
发表于 2012-12-10 02:41:52 | 显示全部楼层
写入那句改成这样试下
kevinch 发表于 2012-12-9 09:57



   学习了,虽然还不明白意思。
发表于 2012-12-10 02:49:55 | 显示全部楼层
回复 12# netegg


蛋兄真的不用睡觉的么?这么晚还在帮解答~~

刚刚试了下,可以确定不是AU3生成或者处理数据的问题(比如说,可以采用分段生成再拼接的形式,其实也没有必要,可以先将数据保存到变量中并输出到控制台,可以看出没是AU3的问题),是EXCEL的问题~~

明天再试
发表于 2012-12-10 02:52:49 | 显示全部楼层
本帖最后由 netegg 于 2012-12-10 02:56 编辑

回复 14# annybaby
不用试了,excel的数字格式好像不支持到18位,我看了用那个格式套到自定义数字格式里,示例出来的就是15位,必须转字符串
那个@就是把数字转成字符串的一个特殊格式
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-17 14:31 , Processed in 0.090545 second(s), 28 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表