Avatar billede rasras Nybegynder
02. juli 2012 - 14:10 Der er 1 løsning

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")) 
Avatar billede rasras Nybegynder
31. august 2012 - 08:28 #1
Spørgsmålet lukket.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester