У меня есть такой текстовый файл:
и я хотел бы организовать в Excel следующим образом:
Я мог бы сделать это вручную для двух записей данных, но я хотел бы иметь возможность автоматизировать это для большего масштаба. То, что я пытался сделать до сих пор, это ввести данные в Excel, используя его встроенную функцию, но это то, где я застрял. Я пытался транспонировать столбцы в строки, но это не организует их так аккуратно, как я хочу. Мне нужно сделать кодирование или есть встроенная функция? Если мне нужно кодирование, может ли кто-нибудь указать мне правильное направление?
Спасибо за ваше время!
решение1
Я бы попробовал надстройку Power Query для этого. Она имеет мощные команды для управления данными. Внизу есть функции, но вы можете добиться многого, просто нажимая кнопки в окне Power Query. Визуальная работа в Power Query обычно намного проще, чем кодирование в VBA.
Я попробовал это конкретное испытание и у меня получилось. Вы можете скачать и использовать мой демо-файл из моего OneDrive:
Это файл: Демонстрация Power Query — реорганизация строк в столбцы.xlsx
Как описано в листе ReadMe, мне нужно было написать только одну простую функцию — остальное было просто кликать по пользовательскому интерфейсу. Power Query великолепен!
Чтобы использовать его против собственных текстовых файлов, просто отредактируйте первый шаг в запросе, чтобы он указывал на ваш файл. Кстати, вы даже можете заставить Power Query циклически перебирать файлы в папке, если это необходимо.
решение2
Powershell грязным способом.
$xlsFile="c:\temp\your.xlsx"
$excel = new-object -comobject excel.application
$excel.displayAlerts = $false
$wbs=$excel.workbooks.open($xlsFile)
$ws=$wbs.sheets.item(1)
$ws.cells.item(1,1) = "Customer"
$ws.cells.item(1,2) = "Apples"
$ws.cells.item(1,3) = "Bananas"
$ws.cells.item(1,4) = "Oranges"
$row = 1
$reader = [System.IO.File]::OpenText("c:\temp\your.txt")
try {
while ($true) {
$line = $reader.ReadLine()
if ($line -eq $null) { break }
if ($line.length -lt 3) {continue}
switch ($line.substring(0,3))
{
"Cus" {
$val="'"+$line.split("#:")[1]
$row++
$ws.cells.item($row,1) = $val
}
"App" {
$val=$line.split(" ")[1]
$ws.cells.item($row,2) = $val
}
"Ban" {
$val=$line.split(" ")[1]
$ws.cells.item($row,3) = $val
}
"Ora" {
$val=$line.split(" ")[1]
$ws.cells.item($row,4) = $val
}
}
}
}
finally {
$reader.Close()
}
$wbs.saveas($xlsFile)
$wbs.close()
$excel.quit()
$ws = $null
$wbs = $null
$excel = $null