Board logo

标题: [问题求助] powershell处理csv遇到的问题 [打印本页]

作者: 小白龙    时间: 2024-11-11 15:11     标题: powershell处理csv遇到的问题

本帖最后由 小白龙 于 2024-11-11 15:14 编辑

情况是这样的, 我要处理一个xls文件, 我在excel中打开时, 身份证号码一列显示的是完整的数字, 为了能让powershell处理xls, 我把xls另存成了csv文件, 处理之后, 我用下面的代码又另存为了xlsx, 但是问题来了, 在excel中打开后, 身份证号码一列, 全是科学计数法的显示, 不像原来xls那样显示完整的身份证号数字了
下面是gpt给的代码, 求路过大佬指导
  1. # 定义 CSV 文件路径和目标 XLSX 文件路径
  2. $csvFile = "C:\Users\Administrator\Desktop\1966\OK.csv"
  3. $excelFile = "C:\Users\Administrator\Desktop\1966\OK2.xlsx"
  4. # 创建 Excel 应用程序对象
  5. $excel = New-Object -ComObject Excel.Application
  6. $excel.Visible = $false
  7. $excel.DisplayAlerts = $false
  8. # 打开 CSV 文件
  9. $workbook = $excel.Workbooks.Open($csvFile)
  10. $worksheet = $workbook.Sheets.Item(1)  # 获取第一个工作表
  11. # 假设身份证号码在第四列,将第四列设置为文本格式
  12. $worksheet.Columns.Item(4).NumberFormat = "@"  # "@" 表示文本格式
  13. # 使用文件格式代码保存为 XLSX 格式 (51 代表 .xlsx 格式)
  14. $workbook.SaveAs($excelFile, 51)
  15. # 关闭工作簿并退出 Excel 应用程序
  16. $workbook.Close()
  17. $excel.Quit()
  18. # 释放 COM 对象
  19. [System.Runtime.Interopservices.Marshal]::ReleaseComObject($worksheet) | Out-Null
  20. [System.Runtime.Interopservices.Marshal]::ReleaseComObject($workbook) | Out-Null
  21. [System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null
复制代码

作者: wanghan519    时间: 2024-11-15 09:26

回复 1# 小白龙


    长数字的列改成="12345678901234567890"这种格式,excel打开才不是科学计数法
作者: 小白龙    时间: 2024-11-15 11:32

回复 2# wanghan519


    但就是这种数字格式的, 试了很多方法, 现在还没解决
作者: wanghan519    时间: 2024-11-15 14:18

回复 3# 小白龙


   
作者: Five66    时间: 2024-11-15 19:15

科学计数法的 文本 也是文本
得用自定格式中那个0才能显示文本 ,不过在显示成科学计数法时就丢失精确了 ,这样的文本是不准确的(后3位全是0) ,这也是为啥设置成普通文本格式还是科学计数法的原因 ,只能重新录入 ,或者一开始就设置成文本格式 ,又或者一开始就想办法让excel识别为文本格式
作者: aloha20200628    时间: 7 天前 11:09

本帖最后由 aloha20200628 于 2024-11-16 11:20 编辑

回复 1# 小白龙

修理 *.csv 中的大数值字段为 ="..." 特殊格式化字段是为 excel 载入 *.csv 先做 ‘备餐’,若不用 ‘备餐’ 而直接在 excel 重置单元格格式为 "0",也许更为便捷,见以下代码... 代码中第7行假设第 C 列为身份证号码字段(楼主可自定义)
  1. $csvFile = "C:\Users\Administrator\Desktop\1966\OK.csv"
  2. $xlsxFile = "C:\Users\Administrator\Desktop\1966\OK2.xlsx"
  3. $xcl = New-Object -ComObject Excel.Application
  4. $xcl.Visible = $false; $xcl.DisplayAlerts = $false
  5. $wb = $xcl.Workbooks.Open($csvFile)
  6. $ws = $wb.Sheets.Item(1); $n = $ws.UsedRange.Rows.Count
  7. $ws.range("C1:C$n").NumberFormat = "0"
  8. $wb.SaveAs($xlsxFile, 51); $wb.Close(); $xcl.Quit()
复制代码

作者: aloha20200628    时间: 7 天前 15:51

本帖最后由 aloha20200628 于 2024-11-16 22:02 编辑

回复 1# 小白龙

更正》6楼代码仅用于 *.csv 包含15位长度以内的数值字段,若包含更多位数字段则须在excel中用 ‘导入外部数据’ 方法载入 *.csv(预先不必对 *.csv 做任何修改),具体步骤如下:
      打开 excel.exe》
      选择 '数据' 菜单 》'导入外部数据'
      在盘区目录中选择目标文件 *.csv 》
      选择 '下一步' 》
      选择 '逗号' 分隔符 》
      选择 '下一步' 》
      选择 大数据所在列 》
      选择 列数据格式 '文本' 》
      选择 '完成' 》'导入位置'(默认=$A$1,即第1列第1行)》选择 '确定'
仅供参考...





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2