2016-12-20 38 views
0

PowershellスクリプトでEPPlus.dllを使用していますが、csvファイルをxlsxファイルに変換していますが、既存のデータを上書きせずにファイルを保存する方法はありません。ファイルを上書きせずにファイルを保存するには

ファイルをExcelにするためにCSVファイルから新しい情報を生成する必要がありますが、 がありますが、他の人が手動で作成したタブでスクリプトを上書きしています。

スクリプトは次のようになります。

$FileNameCSV = "$env:WORKSPACE/file.csv" 
$FileNameExcel = "\\folder\file.xlsx " 

$DLLPath = "D:\EPPlus.dll" 
[Reflection.Assembly]::LoadFile($DLLPath) | Out-Null 

$Format = New-object -TypeName OfficeOpenXml.ExcelTextFormat 
$Format.Delimiter = "," 

$Format.TextQualifier = '"' 
$Format.Encoding = [System.Text.Encoding]::UTF8 
$Format.SkipLinesBeginning = '0' 
$Format.SkipLinesEnd = '1' 

$TableStyle = [OfficeOpenXml.Table.TableStyles]::Medium1 

$ExcelPackage = New-Object OfficeOpenXml.ExcelPackage 
$Worksheet = $ExcelPackage.Workbook.Worksheets.Add("CM") 

$null=$Worksheet.Cells.LoadFromText((Get-Item $FileNameCSV),$Format,$TableStyle,$true) 

$Worksheet.Cells[$Worksheet.Dimension.Address+1].AutoFitColumns() 

$Worksheet.Column(3).Style.Numberformat.Format = "dd/mm/yyyy"; 

$ExcelPackage.SaveAs($FileNameExcel) 

Write-Host "CSV File $FileNameCSV converted to Excel file $FileNameExcel" 

答えて

0

あなたは、おそらくこのように、コンストラクタに名前を渡すことで$FileNameExcel命名既存ファイルを開く必要があります。

その後
$ExcelPackage = New-Object OfficeOpenXml.ExcelPackage($FileNameExcel) 

、追加します新しいワークシートをこのワークブックに追加し、現在の方法と同じ方法でこの新しいワークシートにcsvをロードし、ワークブックを再度保存します。

+0

ありがとうございます、それは動作していますが、スクリプトはまだワークシートの既存のデータを削除します。私はcsvファイルから新しい情報についての 'CM'タブのみを更新したいと思いますが、私が前に言ったように - 私は'手動で '作成したタブを持っています。 – KamilK

+0

ダブルポストに申し訳ありませんが、あなたは正しいです。今はほぼ完璧に動作しています。ほぼ私がExcelファイルを開くと、次のようなメッセージが表示されます: 'Excelは読み込み不能なコンテンツを修復または削除してファイルを開くことができました.'だが、' AutoFilter from table'のような除去機能の後はすべて正常に機能する!おそらく、ファイルが存在するかどうかをチェックする ''もしループを持っているといいでしょう。 – KamilK

+0

@ KamilK:EPPlusは、制限された数のExcel機能のみをサポートしており、一部の機能はおそらく100%ではありません。ドキュメントに手動でデータを追加するときは、互換性のないEPPlusを簡単に挿入することができますので、何をしているのか非常に注意する必要があります。 –

関連する問題