【问题标题】:Cannot Import CSV file using Import-Csv无法使用 Import-Csv 导入 CSV 文件
【发布时间】:2019-03-06 23:34:06
【问题描述】:

在将 excel 转换为 csv 文件后,我正在尝试使用 Import-csv 导入 csv 文件。我收到以下错误。

Import-Csv:无法处理参数,因为参数“名称”的值无效。更改“名称”参数的值并再次运行该操作。

这是我用来将 xls 文件转换为 csv 文件并尝试在命令提示符处导入 csv 文件的脚本

$dst="O:\UserCert\target\"
$Excel = New-Object -Com Excel.Application
$Excel.visible = $False 
$Excel.displayalerts=$False 
foreach ($file in gci "O:\UserCert\*.xls"){
     $wb = $excel.Workbooks.Open($file.fullname)
     $wb.SaveAs($dst + $file.Basename + ".csv",6)
     $wb.Close($true)
}
$excel.Quit()

我在转换中是否犯了 Import-csv 无法理解的错误?

【问题讨论】:

  • 完整的Import-Csv 命令是什么样的?
  • PS O:\UserCert\Target> Import-Csv "O:\UserCert\Target\HiNetUserCertification_New.csv"
  • csv 文件长什么样?至少有一些样本记录。

标签: powershell


【解决方案1】:

我在使用Import-Csv 时有时会遇到这种情况。

结果是在将 .xlsx 保存为 .csv 时出现转换问题。

修复它,而不是使用:

  1. 文件
  2. 另存为
  3. CSV(逗号分隔)(*.csv)

我执行以下操作:

  1. 启动一个新的 Excel 实例
  2. 复制我的 Excel 电子表格的内容
  3. 粘贴新的空白 Excel 文档中的内容
  4. 另存为 CSV(逗号分隔)(*.csv)

之所以可行,是因为当我们执行“复制粘贴”时,我们实际上只复制了具有实际内容的单元格,而“另存为”导出的也是空的列和行。

通过比较一个工作的 CSV 和一个不工作的 CSV,我们可以看到,在我的例子中,有两个额外的列和一些空行被创建(可能是空的列曾经是内容 )。

因此,另一种解决方案是删除内容附近的空列和行,然后正常使用保存。或者,编辑 CSV 文件并删除每行的两个空列。

【讨论】:

    【解决方案2】:

    如果 CSV 文件的格式有问题,您通常会收到该错误消息,您是否在记事本或文本编辑器中打开过一个,它看起来是否正确?我认为问题可能是由于您创建 CSV 的方式,您将工作簿另存为 CSV,但工作簿不能仅转换为 CSV 工作表。 Excel 通常只保存活动工作表。您的 Excel 文件是否包含多个工作表?

    【讨论】:

    • 我尝试通过 Notepad++ 打开,我可以看到正确的数据。是的,我正在转换的 excel 文件中有不止一张工作表,但转换后我在 CSV 文件中只看到一张工作表,当我用 csv 格式再次手动保存这些 CSV 时,我可以用Import-Csv 打开
    • 您在工作簿上调用 SaveAs 方法,请尝试添加一个内部 foreach 循环遍历每个工作簿中的每个工作表,然后在工作表对象上添加 saveAs。
    • foreach ($file in gci "O:\UserCert*.xls"){` $wb = $excel.Workbooks.Open($file.fullname)` foreach ($ws in $wb. worksheets.item(1)){` $ws $ws.SaveAs($dst + $file.Basename + ".csv",6) } $wb.Close($true) } $excel.Quit()
    • 这让我希望我可以使用 Import-CSV 导入 Excel 卡住的格式错误的文件!
    【解决方案3】:

    您是否尝试过手动向 Import-CSV 提供标头?

    我在同样的问题上苦苦挣扎,但是 excel 不是我等式的一部分,而且我的文件没有可以使用的标题。除非我手动指定 Import-CSV 的 -Header 属性,否则我会收到相同的错误

    此外,当我不知道标题是什么时,我会使用一个范围来创建一个动态的。您唯一需要知道的是有多少字段。问题是,如果游侠高于字段数,它们将显示为空白列。

    我倾向于使用 Out-GridView 和一些猜测来验证它是否按预期工作。 因此,如果我知道有 30 个或更少的字段,我可以执行以下操作:

    Import-CSV "filehere.csv" -Header (1..30) | Out-GridView
    

    使用高于实际字段数的范围存在一些问题,但这是一个有用的诊断技巧。

    如果您发现您的文件定义的标题在幕后做了一些邪恶的事情,您可以跳过第一行,然后分配您的自定义标题文本或范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-23
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 2021-09-22
      • 2016-03-25
      相关资源
      最近更新 更多