Powershell - fra Word tabeller til Excel
Hej Eksperter,Jeg sidder med et Powershell script, der driller. Det skal løbe et dokument igennem for tabeller, og hvis tabellens første celle er formateret med en bestemt typografi, trække data fra tabellen over i et Excel-ark der oprettes til formålet.
I følge Powershell ISE går det galt ved linjerne 44 og 46 (se udklip nedenfor). Jeg har et stærkt begrænset kendskab til Powershell, så problemet er sandsynligvis, at jeg ikke helt ved, hvad jeg laver.
Hele scriptet:
function Invoke([object]$m, [string]$method, $parameters)
{
$m.PSBase.GetType().InvokeMember(
$method, [Reflection.BindingFlags]::InvokeMethod, $null, $m, $parameters,$ciUS)
}
$word = new-object -ComObject "word.application"
#$word.Visible = $true
del "C:\PowerShell Kravextractor\excelfil.xls"
$doc = $word.documents.open("C:\PowerShell Kravextractor\wordfil.docx")
$sel = $word.Selection
$tables = $doc.Tables
# debug $paras.Item(7).Style.NameLocal
$excel = New-Object -comobject Excel.Application
#$excel.Visible = $True
$ciUS = [System.Globalization.CultureInfo]'en-US'
$workbook = Invoke $excel.Workbooks Add
$worksheet = $workbook.Worksheets.Item(1)
#$worksheet.Cells.Item(1,1).FormulaLocal = "A value in cell A1."
$worksheet.Cells.Item(1,1).FormulaLocal = "Krav # (ID)"
$worksheet.Cells.Item(1,2).FormulaLocal = "Titel"
$worksheet.Cells.Item(1,3).FormulaLocal = "Kategori"
$worksheet.Cells.Item(1,4).FormulaLocal = "Type"
$worksheet.Cells.Item(1,5).FormulaLocal = "Beskrivelse"
# debug
# $doc.Paragraphs.Item(9).Style.NameLocal
$cnt = 1
foreach ($table in $tables)
{
$style = $table.Cells.Item(1,1).Range.ParagraphStyle
If ($style.NameLocal.Contains("Krav1 Overskrift"))
{
#echo $cnt
$id = $table.Cell(1,1).Range.Text
$titel = $table.Cell(1,2).Range.Text
$kat = $table.Cell(2,2).Range.Text
$type = $table.Cell(2,4).Range.Text
$besk = $table.Cell(3,2).Range.Text
$cnt += 1
$worksheet.Cells.Item($cnt,1).FormulaLocal = $id
$worksheet.Cells.Item($cnt,2).FormulaLocal = $titel
$worksheet.Cells.Item($cnt,3).FormulaLocal = $kat
$worksheet.Cells.Item($cnt,4).FormulaLocal = $type
$worksheet.Cells.Item($cnt,5).FormulaLocal = $besk
echo $id
}
}
#echo $cnt
#$excel.DisplayAlerts = $False
Invoke $workbook SaveAs "C:\PowerShell Kravextractor\excelfil.xls" > $null
Invoke $workbook Close 0 > $null
$word.Quit()
$excel.Quit()
De problematiske dele:
$style = $table.Cells.Item(1,1).Range.ParagraphStyle
If ($style.NameLocal.Contains("Krav1 Overskrift"))