因此,我有一个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
同样,如果可能的话,将所有值排在一起将是有益的。IE。就像前三行一样,而不是后四行。
我希望能够运行一个脚本,该脚本随后将输出带有一些预定义数据的.txt文件,然后输出表中每个条目的单元格的相关值。我以为我需要某种“ For Each”循环,并且我必须定义许多变量,我本质上并不是真正的编码员,而在绝对需要时才涉猎。
提前非常感谢您可以提供的任何帮助。
我假设VBA可能是最受欢迎的选项,尽管我也对潜在的Powershell解决方案也持开放态度。
好的,所以我研究了一些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?
我可以全部输出吗?还是我需要一次输出每一行?
谢谢!
好吧...所以我尝试了更多的东西。
$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一样设置文本的格式/布局。这可能吗?
“值1”需要与“文本1”在同一行
我可能还需要做
在某些行上显示“ Text1:$ Value1,$ Value2,$ Value3”。
再次感谢!
使用Windows PowerShell -f Format运算符根据需要格式化行,请参见about_Operators帮助主题,例如Get-Help 'about_Operators' -ShowWindow
:
-f Format operator Formats strings by using the format method of string objects. Enter the format string on the left side of the operator and the objects to be formatted on the right side of the operator. C:\PS> "{0} {1,-10} {2:N}" -f 1,"hello",[math]::pi 1 hello 3.14
有关更多信息,请参见
String.Format
方法和复合格式。
例子:
Get-ChildItem | ForEach-Object { Write-Output $("{0},{1}" -f "Text1", $_."Name") }
### ↑
样本输出:
Text1,Downloaded
Text1,SF
Text1,SO
Text1,SU
Text1,addF7.ps1
编辑以回答扩展的问题:那么,我将如何编写代码以排除编写Null值的输出?您可以使用.NET框架中的MethodSplit(Char(), StringSplitOptions)
形式,并将结果按如下所示重新连接到单个字符串中(尽管可能有更聪明的简单方法):String.Split
$strng = "{0}:{1},{2},{3},{4},{5}" -f "Item x", 1, $null, 3, $null, $null
$strng
$strng.Split(",",[System.StringSplitOptions]::RemoveEmptyEntries) -join ","
输出
Item x:1,,3,,
Item x:1,3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句