提取 gz 并将 csv 转换为 xlsx
Extract gz and convert csv to xlsx
我希望有人能帮我解决这个问题。我尝试 Google 做我需要的东西,但没有任何具体或容易适应的东西,我在编程和编码方面很笨...
我每天使用的一个应用程序会生成多个 gz 文件,每个文件包含一个 csv 文件。为了简化我的生活,我希望 运行 一个脚本可以完成这项工作:
- 从当前文件夹中的任何 gz 中提取 csv 文件
- 将任何提取的 csv 文件保存为同一文件夹中的 xlsx 文件
- 正确重命名 xlsx 文件
- 从当前文件夹中删除任何 gz 和 csv 文件
这里有一些关于环境和要求的更多细节:
- 运行 OS 是 Windows 7 Enterprise(安装了 Powershell)
- Office 2010 已安装
- 我无法安装任何额外的软件或库(这是一台公司笔记本电脑)
任何 csv 文件都具有以下命名约定:
CheeseFile_YellowCheese_yyyy_mm_dd-randomnumber_othersnumber.csv
CheeseFile_BlueCheese_yyyy_mm_dd-randomnumber_othersnumber.csv
HamFile_RawHam_yyyy_mm_dd-randomnumber_othersnumber.csv
HamFile_CookedHam_yyyy_mm_dd-randomnumber_othersnumber.csv
并分别保存为:
OutputFile - CheeseFile_mmddyyyy_Yellow Cheese.xlsx
OutputFile - CheeseFile_mmddyyyy_Blue Cheese.xlsx
OutputFile - HamFile_mmddyyyy_Raw Ham.xlsx
OutputFile - HamFile_mmddyyyy_Coocked Ham.xlsx
原始文件名中的日期必须保留在输出 xlsx 文件中
- 奶酪文件在它们的文件夹中,火腿文件在单独的文件夹中,因此我可以根据需要调整脚本。
如果您需要更多详细信息,请告诉我,提前感谢您提供的任何帮助:)
7z e *.gz;ls | foreach {$old=$_.name;$newname='OutputFile - '+$oldname.split('_')[0]+'_'+$oldname.split('_')[3]+$oldname.split('_')[4]+$oldname.split('_')[2]+'_'+$oldname.split('_')[1]+'.xlsx';mv $oldname $newname }
虽然我同意 OP 似乎没有尽其所能解决这个问题(Google 有多难?),但我知道将来会有其他人关注。发布信息会对他们有所帮助。
@OP,我不会为你做所有的文件处理工作,但这是从 CSV 转换为 XLSX 的基本代码,这可能是所提出问题中最不常见的部分。
Option Explicit
Dim strCSVfile, strExcelFile, FSO
Dim objWorkbook, objWorksheet1
set FSO = CreateObject("Scripting.FileSystemObject")
strCSVfile = "C:\temp\Excel Test\myFile.csv"
strExcelFile = "C:\temp\Excel Test\myFile.xlsb" 'this was changed
if FSO.FileExists(strCSVfile) then
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.displayalerts=false
'Import CSV into Spreadsheet
Set objWorkbook = objExcel.Workbooks.open(strCSVfile)
Set objWorksheet1 = objWorkbook.Worksheets(1)
'Save workbook (51 = 2010 format)
'Formats ref https://msdn.microsoft.com/en-us/library/office/ff198017.aspx
'Parameters ref https://msdn.microsoft.com/en-us/library/office/ff841185.aspx
objWorksheet1.SaveAs strExcelFile, 50 'this was changed
objExcel.Quit()
else
msgbox "File Note found"
end if
编辑: 顺便说一句,OP@... post 你的代码和更多的人会帮助你。如果您使用您为解压缩和文件处理编写的代码更新您的问题,我会帮助解决这部分问题。
编辑: 针对 .xlsb 格式输出进行了更新。行更改标记为这样。
我希望有人能帮我解决这个问题。我尝试 Google 做我需要的东西,但没有任何具体或容易适应的东西,我在编程和编码方面很笨...
我每天使用的一个应用程序会生成多个 gz 文件,每个文件包含一个 csv 文件。为了简化我的生活,我希望 运行 一个脚本可以完成这项工作:
- 从当前文件夹中的任何 gz 中提取 csv 文件
- 将任何提取的 csv 文件保存为同一文件夹中的 xlsx 文件
- 正确重命名 xlsx 文件
- 从当前文件夹中删除任何 gz 和 csv 文件
这里有一些关于环境和要求的更多细节:
- 运行 OS 是 Windows 7 Enterprise(安装了 Powershell)
- Office 2010 已安装
- 我无法安装任何额外的软件或库(这是一台公司笔记本电脑)
任何 csv 文件都具有以下命名约定:
CheeseFile_YellowCheese_yyyy_mm_dd-randomnumber_othersnumber.csv CheeseFile_BlueCheese_yyyy_mm_dd-randomnumber_othersnumber.csv HamFile_RawHam_yyyy_mm_dd-randomnumber_othersnumber.csv HamFile_CookedHam_yyyy_mm_dd-randomnumber_othersnumber.csv
并分别保存为:
OutputFile - CheeseFile_mmddyyyy_Yellow Cheese.xlsx OutputFile - CheeseFile_mmddyyyy_Blue Cheese.xlsx OutputFile - HamFile_mmddyyyy_Raw Ham.xlsx OutputFile - HamFile_mmddyyyy_Coocked Ham.xlsx
原始文件名中的日期必须保留在输出 xlsx 文件中
- 奶酪文件在它们的文件夹中,火腿文件在单独的文件夹中,因此我可以根据需要调整脚本。
如果您需要更多详细信息,请告诉我,提前感谢您提供的任何帮助:)
7z e *.gz;ls | foreach {$old=$_.name;$newname='OutputFile - '+$oldname.split('_')[0]+'_'+$oldname.split('_')[3]+$oldname.split('_')[4]+$oldname.split('_')[2]+'_'+$oldname.split('_')[1]+'.xlsx';mv $oldname $newname }
虽然我同意 OP 似乎没有尽其所能解决这个问题(Google 有多难?),但我知道将来会有其他人关注。发布信息会对他们有所帮助。
@OP,我不会为你做所有的文件处理工作,但这是从 CSV 转换为 XLSX 的基本代码,这可能是所提出问题中最不常见的部分。
Option Explicit
Dim strCSVfile, strExcelFile, FSO
Dim objWorkbook, objWorksheet1
set FSO = CreateObject("Scripting.FileSystemObject")
strCSVfile = "C:\temp\Excel Test\myFile.csv"
strExcelFile = "C:\temp\Excel Test\myFile.xlsb" 'this was changed
if FSO.FileExists(strCSVfile) then
Dim objExcel
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
objExcel.displayalerts=false
'Import CSV into Spreadsheet
Set objWorkbook = objExcel.Workbooks.open(strCSVfile)
Set objWorksheet1 = objWorkbook.Worksheets(1)
'Save workbook (51 = 2010 format)
'Formats ref https://msdn.microsoft.com/en-us/library/office/ff198017.aspx
'Parameters ref https://msdn.microsoft.com/en-us/library/office/ff841185.aspx
objWorksheet1.SaveAs strExcelFile, 50 'this was changed
objExcel.Quit()
else
msgbox "File Note found"
end if
编辑: 顺便说一句,OP@... post 你的代码和更多的人会帮助你。如果您使用您为解压缩和文件处理编写的代码更新您的问题,我会帮助解决这部分问题。
编辑: 针对 .xlsb 格式输出进行了更新。行更改标记为这样。