-1

つまり、基本的にテーブルである Excel ドキュメントがあります。

この目的のために、これを使用します: ダミーデータ

私がやりたいことは、これらのセルから値を取得し、.txt ファイルに配置することです。ただし、テキスト ファイルには必要なフォーマットがいくつかあり、スプレッドシートの「エントリ」(行) ごとのパターンに従います。

例えば

***********
**THIS IS A FANCY TEXT FILE**
***********
<Start of entry text>
Predefined text here (Entry 1): $A1
Predefined text here:           $B1,$C1
Predefined text here:           $D1,$E1,$F1
Predefined text here: $G1,$H1
Predefined text here: $I1
Predefined text here: $J1,$K1,$L1
Predefined text here: $M1,$N1
<End of entry text>

<Start of entry text>
"As Above"
<End of entry text>
etc, etc

また、可能であれば、すべての値を一列に並べると便利です。すなわち。最後の 4 行とは対照的に、最初の 3 行がそうです。

スクリプトを実行して、事前定義されたデータを含む .txt ファイルを出力し、その後にテーブルの各エントリのセルの関連値を出力できるようにしたいと考えています。ある種の「For Each」ループが必要になると思います。多くの変数を定義する必要があります。私は本質的にコーダーではなく、絶対に必要な場合にのみ手を出します。

どうぞよろしくお願いいたします。

VBA が最も一般的なオプションであると想定していますが、潜在的な PowerShell ソリューションも受け入れています。

  • XViper

わかりましたので、いくつかのpowershellオプションを調べて、そのアプローチを取りたいと思います。

Import-XLS 関数を使用して動作させることができました。ただし、出力を .txt ファイルに取得する方法がわかりません。

Import-XLS '.\DummyData.xlsx' | Foreach-Object{
Write-host "Predefined data:" `t $_."Value 1"
Write-host "Predata:" `t`t`t $_."Value 2"

これは私にこれを与えます。

Predefined data:     AA
Predata:             11
Predefined data:     BB
Predata:             BB11
Predefined data:     CC
Predata:             CC11
Predefined data:     DD
Predata:             DD11
Predefined data:     EE
Predata:             EE11
Predefined data:     FF
Predata:             FF11
Predefined data:     GG
Predata:             GG11
Predefined data:     HH
Predata:             HH11

Write-Host を使用して出力できないことはわかっていますが、すべてのデータを「収集」して、最後に「ForEach」を .txt に出力するにはどうすればよいですか?

まとめて出力することはできますか?または、各行を一度に 1 つずつ出力する必要がありますか?

ありがとう!


わかりました...それで、さらにいくつか試してみました。

$OutFile = ".\OutTest$(get-date -Format dd-MM).txt"

$Content = Import-XLS '.\DummyData.xlsx'

$Content | foreach-object{
Write-Output "Text1" $_."Value 1"
Write-Output "Text2" $_."Value 2"

} | Out-File $OutFile

したがって、これは機能しているように見えますが、問題は、すべてが新しい行にあることです。

だから私はこれを得る:

Text1
AA
Text2
11
Text1
BB
Text2
BB11

Write-Host を使用できるように、テキストをフォーマット/レイアウトできる必要があります。これは可能ですか?

「Value 1」は「Text1」と同じ行にある必要があります

私もする必要があるかもしれません

一部の行で「Text1: $Value1, $Value2, $Value3」。

再度、感謝します!

4

2 に答える 2

0

わかりましたので、解決したと思います。(ただし、それがどのように機能するかは完全にはわかりません)。

一連の試行錯誤と $() の派手な使用を通じて <-- 誰かが私にこれを説明してもらえますか?

私はこれを思いつきました。

$OutFile = ".\OutTest$(get-date -Format dd-MM).txt"

$Content = Import-XLS '.\DummyData.xlsx'

$Content | foreach-object{
Write-Output "Text1: `t $(($_).Value1)"
Write-Output "Text2: `t $(($_).Value2), $(($_)."Value 3")"  #I tried putting this all inside one $(), but that made the comma not appear. Why??

} | Out-File $OutFile

これが生成されます:

Text1:   AA
Text2:   11, 22
Text1:   BB
Text2:   BB11, BB22
Text1:   CC
Text2:   CC11, CC22
Text1:   DD
Text2:   DD11, DD22

これを達成するためのよりエレガントな方法またはより良い方法がある場合は、お知らせください。この特定のケースに必要なことをなんとか達成できたと思います。

これが後で誰かに役立つことを願っています!:)

専門家のフィードバックをいただければ幸いです。

ありがとう。

于 2016-07-03T08:19:02.330 に答える