我尝试使用PS脚本从\tmp\
目录下载所有CSV文件,并将其转换为一个Excel文件作为报告,然后将其放置在\reports\
目录下,名称为LDAP.xlsx
。我的CSV文件保存了不同数量的数据。
在论坛中,我发现了这个how-to-export-a-csv-to-excel-using-powershell,我的代码看起来像这样:
Clear-Host
# SOURCE
##########
# config file
$conf_file = "C:\PS_LDAP_searchlight\config\searchlight_conf.conf"
$conf_values = Get-Content $conf_file | Out-String | ConvertFrom-StringData
# variables from config file
$main_path = $conf_values.main_path
$tmp_path = $conf_values.tmp_path
$reports_path = $conf_values.reports_path
# PROGRAM
##########
$workingdir = $main_path + $tmp_path + "*.csv"
$reportsdir = $main_path + $reports_path
$csv = dir -path $workingdir
foreach($inputCSV in $csv){
$outputXLSX = $reportsdir + "\" + $inputCSV.Basename + ".xlsx"
### Create a new Excel Workbook with one empty sheet
$excel = New-Object -ComObject excel.application
$excel.DisplayAlerts = $False
$workbook = $excel.Workbooks.Add(1)
$worksheet = $workbook.worksheets.Item(1)
### Build the QueryTables.Add command
### QueryTables does the same as when clicking "Data » From Text" in Excel
$TxtConnector = ("TEXT;" + $inputCSV)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)
### Set the delimiter (, or ;) according to your regional settings
### $Excel.Application.International(3) = ,
### $Excel.Application.International(5) = ;
$query.TextFileOtherDelimiter = $Excel.Application.International(5)
### Set the format to delimited and text for every column
### A trick to create an array of 2s is used with the preceding comma
$query.TextFileParseType = 1
$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1
### Execute & delete the import query
$query.Refresh()
$query.Delete()
### Save & close the Workbook as XLSX. Change the output extension for Excel 2003
$Workbook.SaveAs($outputXLSX,51)
$excel.Quit()
# Cleaner
$inputCSV = $null
$outputXLSX = $null
}
## To exclude an item, use the '-exclude' parameter (wildcards if needed)
#remove-item -path $workingdir -exclude *Crab4dq.csv
# CLEANER
###############################
# SOURCE
###############################
# config file
$conf_file = $null
$conf_values = $null
# variables from config file
$main_path = $null
$tmp_path = $null
$reports_path = $null
# PROGRAM
###############################
$workingdir = $null
$csv = $null
$reportsdir = $null
该代码读取所有文件,但写入一对一。我需要有关如何进行多对一选项的帮助和说明。我希望每个CSV文件以其自己的名称保存为单独的工作表,如下所示:
Excel表格中的所有用户信息.csv
excel中的active_users_last_logon_year_ago.csv =〉一年前的活动用户上次登录
下一个文件名.csv在excel中\下一个工作表=〉下一个文件名
以便所有数据在一个excel report.xlsx文件中可用。
我将感谢任何提示或帮助转换代码。
3条答案
按热度按时间krcsximq1#
我找到了一个部分解决问题的解决方案:
这样就解决了多对一的问题,但是在工作表中所有的数据都存储在一列中。2此时我得到:csv档案:
报告如下:
我需要帮助将数据拆分为如下列:
rbpvctlc2#
请找到使用ImportExcel模块的github链接。https://github.com/dfinke/ImportExcel/tree/master/Examples
希望能有所帮助。
7fyelxc53#
最后我的代码看起来像: