【问题标题】:Importing CSV Into New Worksheet将 CSV 导入新工作表
【发布时间】:2016-07-21 16:06:42
【问题描述】:

我正在尝试将 CSV 文件导入新创建的 Excel 工作表,但无法利用此处(和其他地方)的现有问答来解决此问题。

另外,我确信我让这种方式变得更加困难,所以如果你认为合适,请随时更正这个臃肿的代码:

$varOneSheet = "OneSheet"

$xlsNewFile = New-Object -ComObject Excel.Application
$xlsNewFile.SheetsInNewWorkbook = 3
$xlsNewFile.displayAlerts = $false
$xlsNewFile.Visible = $false
$xlsWorkbook = $xlsNewFile.Workbooks.Add()

$sheetToRename = $xlsNewFile.Sheets.Item("Sheet1")
$sheetToRename.Name = $OneSheet

#this all works below, we need to push the data over to #xlsWorkbook now
$xlsCSVFile = New-Object -ComObject Excel.Application
$xlsCSVFile.displayAlerts = $false
$csvFilename = (".\DATA.CSV")
$xlsCSVFile.Workbooks.OpenText($csvFilename, 2, 1, 1, 1, $false, $false, $false, $true)
$xlsCSVFile.Visible = $true 
$tmpSheetTOFile = $xlsWorkbook.Sheets.Item(1)
$tmpWorksheet = $xlsCSVFile.Sheets.Item(1)
#########################above is fine

#########################below should copy into $xlsWorkbook Sheet 1
$tmpWorksheet.Copy($tmpSheetTOFile)

上面的最后一行是故障点,产生:

使用“1”参数调用“复制”的异常:“工作表类的复制方法
失败的”
在行:1 字符:23
+ $tmpWorksheet.Copy 

我真的需要创建一个单独的/临时工作簿吗?为什么我无法在已保存/现有的工作簿上简单地使用 OpenText

编辑:我使用this 上一个问题来了解我现在的位置,这就是为什么我不确定故障点在哪里。因为答案被接受并签字。

【问题讨论】:

    标签: excel powershell powershell-2.0 worksheet


    【解决方案1】:

    您正在创建两个不同的 Excel 应用程序实例:

    $xlsNewFile = New-Object -ComObject Excel.Application
    ...
    $xlsCSVFile = New-Object -ComObject Excel.Application
    

    复制只能在同一个实例中使用,并且无论如何都不需要使用两个实例。只需删除

    $xlsCSVFile = New-Object -ComObject Excel.Application
    $xlsCSVFile.displayAlerts = $false
    ...
    $xlsCSVFile.Visible = $true 
    

    改变

    $xlsCSVFile.Workbooks.OpenText($csvFilename, 2, 1, 1, 1, $false, $false, $false, $true)
    ...
    $tmpWorksheet = $xlsCSVFile.Sheets.Item(1)
    ...
    $tmpWorksheet.Copy($tmpSheetTOFile)
    

    $xlsNewFile.Workbooks.OpenText($csvFilename, 2, 1, 1, 1, $false, $false, $false, $true)
    ...
    $xlsNewFile.Workbooks.Item(2).Sheets.Item(1).Copy($tmpSheetTOFile)
    

    话虽如此,当 Excel 导入 CSV 时,它会自动创建一个带有新工作表的工作簿(这也是 OpenText 不将 CSV 导入现有工作簿的原因),那么你为什么需要首先将其复制到另一个新工作簿?通常只需将导入的 CSV 保存为 Excel 工作簿即可。如果您需要额外的工作表,您可以添加它们。

    $wsName      = 'OneSheet'
    $csvFilename = '.\data.csv'
    $xlsFilename = '.\data.xlsx'
    
    $xl = New-Object -ComObject 'Excel.Application'
    $xl.DisplayAlerts = $false
    $xl.Visible = $false
    
    $xl.Workbooks.OpenText($csvFilename, 2, 1, 1, 1, $false, $false, $false, $true)
    
    $wb = $xl.Workbooks.Item(1)
    $ws = $wb.Sheets.Item(1)
    $ws2 = $wb.Sheets.Add([Type]::Missing, $ws)
    $ws3 = $wb.Sheets.Add([Type]::Missing, $ws2)
    $ws.Name = $wsName
    
    $wb.SaveAs($xlsFilename, 51)
    

    【讨论】:

    • 谢谢,我没有意识到您应该为这两个实例使用主要的 Excel COM 对象。还是业余的。 ;)
    猜你喜欢
    • 1970-01-01
    • 2019-10-10
    • 2015-06-22
    • 1970-01-01
    • 2015-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-07-25
    • 1970-01-01
    相关资源
    最近更新 更多