【问题标题】:Using Powershell to convert text to number in Excel在 Excel 中使用 Powershell 将文本转换为数字
【发布时间】:2022-02-19 22:13:55
【问题描述】:

我有一个 Excel 文件,其中三列设置为数字。但是,当我打开文件时,我有这个:

我在这里找到了一个有用的链接:stackoverflow link

我已尝试过此方法,但出现以下错误。是不是我做错了什么:

$wb = 'C:\Users\user1\Documents\Working Folder\239\239_uploadFile.xlsx'
$excel = new-object -ComObject excel.application
$excel.visible = $false
$excel.DisplayAlerts = $false
$wb = $excel.workbooks.open($wb)
$ws1 = $wb.worksheets.item(3)

$ws1.columns.item(1).numberformat = 0
$ws1.Columns.item(14).Value = $ws1.Columns.item(14).Value



$wb.Save()
$wb.close()
$excel.Quit()
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($excel)
Remove-Variable excel`

[

【问题讨论】:

  • 我认为他们误解了.Item(1) 表示列中的第一个单元格。要么是那个,要么是一个错字,他们只是错过了4
  • @TheMadTechnician 是的,请忽略.. 我在想Columns(1),而不是Columns.Item(1)
  • @Theo 在这种情况下,这些是相同的。如果要引用单元格,则需要执行 $ws1.Columns.item(14).cells.item(1).numberformat = 0 或类似的操作,以引用单元格 N1

标签: excel powershell


【解决方案1】:
  • 在最新版本的 Excel 中(至少 Excel 2019),.Value 属性现在是 参数化 属性,因此需要 参数以便使用

    • 简单的解决方法改用.Value2属性 - 如下所示。
    • 但是,.Value2.Value 的不同之处在于“它不使用 货币日期 数据types" - 如果需要这些类型,请使用.Value(10)(原文如此)(10xlRangeValueDefault 常量的值)。
  • 虽然使用 .Item() 方法明确过去在早期的 PowerShell (Core) 版本中是必需的,但从(至少)PowerShell (Core) 7.2.1 起不再是这种情况。

因此,请尝试以下操作:

& {
  $wb = 'C:\Users\user1\Documents\Working Folder\239\239_uploadFile.xlsx'
  $excel = new-object -ComObject excel.application

  $wb = $excel.workbooks.open($wb)
  $ws1 = $wb.worksheets(3)

  $ws1.columns(1).numberformat = 0
  # Note the use of .Value2, not .Value
  $ws1.Columns(14).Value2 = $ws1.Columns(14).Value2

  $wb.Save()
  $wb.close()
  $excel.Quit()
}

注意& { ... }的使用,即在子范围中执行Excel相关代码。这使得对和 Remove-Variable excel 的调用变得不必要 - 请参阅 this answer 了解更多信息。

【讨论】:

    猜你喜欢
    • 2017-10-11
    • 1970-01-01
    • 2017-05-06
    • 1970-01-01
    • 2011-04-12
    • 1970-01-01
    • 1970-01-01
    • 2021-07-15
    相关资源
    最近更新 更多