标题: [问题求助] powershell处理csv遇到的问题 [打印本页]
作者: 小白龙 时间: 2024-11-11 15:11 标题: powershell处理csv遇到的问题
本帖最后由 小白龙 于 2024-11-11 15:14 编辑
情况是这样的, 我要处理一个xls文件, 我在excel中打开时, 身份证号码一列显示的是完整的数字, 为了能让powershell处理xls, 我把xls另存成了csv文件, 处理之后, 我用下面的代码又另存为了xlsx, 但是问题来了, 在excel中打开后, 身份证号码一列, 全是科学计数法的显示, 不像原来xls那样显示完整的身份证号数字了
下面是gpt给的代码, 求路过大佬指导- # 定义 CSV 文件路径和目标 XLSX 文件路径
- $csvFile = "C:\Users\Administrator\Desktop\1966\OK.csv"
- $excelFile = "C:\Users\Administrator\Desktop\1966\OK2.xlsx"
-
- # 创建 Excel 应用程序对象
- $excel = New-Object -ComObject Excel.Application
- $excel.Visible = $false
- $excel.DisplayAlerts = $false
-
- # 打开 CSV 文件
- $workbook = $excel.Workbooks.Open($csvFile)
- $worksheet = $workbook.Sheets.Item(1) # 获取第一个工作表
-
- # 假设身份证号码在第四列,将第四列设置为文本格式
- $worksheet.Columns.Item(4).NumberFormat = "@" # "@" 表示文本格式
-
- # 使用文件格式代码保存为 XLSX 格式 (51 代表 .xlsx 格式)
- $workbook.SaveAs($excelFile, 51)
-
- # 关闭工作簿并退出 Excel 应用程序
- $workbook.Close()
- $excel.Quit()
-
- # 释放 COM 对象
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
- [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
复制代码
作者: wanghan519 时间: 7 天前 09:26
回复 1# 小白龙
长数字的列改成="12345678901234567890"这种格式,excel打开才不是科学计数法
作者: 小白龙 时间: 7 天前 11:32
回复 2# wanghan519
但就是这种数字格式的, 试了很多方法, 现在还没解决
作者: wanghan519 时间: 7 天前 14:18
回复 3# 小白龙
作者: Five66 时间: 7 天前 19:15
科学计数法的 文本 也是文本
得用自定格式中那个0才能显示文本 ,不过在显示成科学计数法时就丢失精确了 ,这样的文本是不准确的(后3位全是0) ,这也是为啥设置成普通文本格式还是科学计数法的原因 ,只能重新录入 ,或者一开始就设置成文本格式 ,又或者一开始就想办法让excel识别为文本格式
作者: aloha20200628 时间: 6 天前 11:09
本帖最后由 aloha20200628 于 2024-11-16 11:20 编辑
回复 1# 小白龙
修理 *.csv 中的大数值字段为 ="..." 特殊格式化字段是为 excel 载入 *.csv 先做 ‘备餐’,若不用 ‘备餐’ 而直接在 excel 重置单元格格式为 "0",也许更为便捷,见以下代码... 代码中第7行假设第 C 列为身份证号码字段(楼主可自定义)
- $csvFile = "C:\Users\Administrator\Desktop\1966\OK.csv"
- $xlsxFile = "C:\Users\Administrator\Desktop\1966\OK2.xlsx"
- $xcl = New-Object -ComObject Excel.Application
- $xcl.Visible = $false; $xcl.DisplayAlerts = $false
- $wb = $xcl.Workbooks.Open($csvFile)
- $ws = $wb.Sheets.Item(1); $n = $ws.UsedRange.Rows.Count
- $ws.range("C1:C$n").NumberFormat = "0"
- $wb.SaveAs($xlsxFile, 51); $wb.Close(); $xcl.Quit()
复制代码
作者: aloha20200628 时间: 6 天前 15:51
本帖最后由 aloha20200628 于 2024-11-16 22:02 编辑
回复 1# 小白龙
更正》6楼代码仅用于 *.csv 包含15位长度以内的数值字段,若包含更多位数字段则须在excel中用 ‘导入外部数据’ 方法载入 *.csv(预先不必对 *.csv 做任何修改),具体步骤如下:
打开 excel.exe》
选择 '数据' 菜单 》'导入外部数据'
在盘区目录中选择目标文件 *.csv 》
选择 '下一步' 》
选择 '逗号' 分隔符 》
选择 '下一步' 》
选择 大数据所在列 》
选择 列数据格式 '文本' 》
选择 '完成' 》'导入位置'(默认=$A$1,即第1列第1行)》选择 '确定'
仅供参考...
欢迎光临 批处理之家 (http://www.bathome.net/) |
Powered by Discuz! 7.2 |