如何将已关闭的工作簿 sheet 导出到 .CSV 文件?
How can I export a closed workbook sheet to a .CSV file?
我目前正在研究一组 vba 函数,这些函数应该允许用户从 xls 或 xlsx 文件中导出多个 sheets 并将它们全部导出为不同的文件格式,具体取决于sheet 的名称。这是一个使用旧文件的非常具体的过程。
所选文件中的某些 sheet 应被视为原始数据,我想将它们导出为 .CSV 文件而不对数据进行任何更改。如果有帮助,我什至不需要 "see" 数据来进行 IF 或其他逻辑处理。
我已经有一个函数可以从关闭文件的特定 sheet 中的特定单元格中获取数据,但我不知道如何从 sheet 中获取所有数据无需遍历所有数十亿个大部分为空的单元格,只是为了检查 Cell(23785;GP) 中是否有数据。
这是我已有的函数,可能有助于理解预期的行为。
Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
ByVal WBName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
GetInfoFromClosedFile = ""
If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
If Dir(wbPath & "\" & WBName) = "" Then Exit Function
arg = "'" & wbPath & "[" & WBName & "]" & wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
On Error Resume Next
GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function
有必要在最后关闭另一个工作簿,并且不对当前工作簿进行任何更改。最起码,所有的修改都应该撤消,这样用户在选择文件后,只会看到我的确认消息和他电脑上新建的文件,他的Excel没有明显的区别。由于这将由既不是程序员也不是非常精通技术的人使用,因此任何弄乱他们当前可以同时用于某些事情的工作簿都会招来一些投诉。
此 Sub 将文件字符串和 sheet 名称作为参数来创建一个 .CSV 文件,扩展名 .csv 附加到其先前的名称、sheet 名称和扩展名。
Private Sub export_file_to_csv(src_path, sheet_name)
Application.DisplayAlerts = False
Set src_workbook = Workbooks.Open(src_path, , True)
src_workbook.Sheets(sheet_name).Activate
dst_path = src_path & " - " & sheet_name & ".csv"
src_workbook.SaveAs Filename:=dst_path, FileFormat:=xlCSV
src_workbook.Close
Application.DisplayAlerts = True
End Sub
然后您可以在另一个子程序中根据需要多次调用它。
Sub main_sub()
export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Europe"
export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Asia"
export_file_to_csv "C:\Users\username\Documents\budget.xls", "Sheet1"
End Sub
只需将此代码放在另一个工作簿中,编辑将导出为 CSV 的文件的路径和 sheet 名称以及 运行 main_sub,它们应该出现在宏菜单。原始文件将保持不变,因为它们以只读方式打开。
希望对您有所帮助!
我目前正在研究一组 vba 函数,这些函数应该允许用户从 xls 或 xlsx 文件中导出多个 sheets 并将它们全部导出为不同的文件格式,具体取决于sheet 的名称。这是一个使用旧文件的非常具体的过程。
所选文件中的某些 sheet 应被视为原始数据,我想将它们导出为 .CSV 文件而不对数据进行任何更改。如果有帮助,我什至不需要 "see" 数据来进行 IF 或其他逻辑处理。
我已经有一个函数可以从关闭文件的特定 sheet 中的特定单元格中获取数据,但我不知道如何从 sheet 中获取所有数据无需遍历所有数十亿个大部分为空的单元格,只是为了检查 Cell(23785;GP) 中是否有数据。
这是我已有的函数,可能有助于理解预期的行为。
Private Function GetInfoFromClosedFile(ByVal wbPath As String, _
ByVal WBName As String, wsName As String, cellRef As String) As Variant
Dim arg As String
GetInfoFromClosedFile = ""
If Right(wbPath, 1) <> "\" Then wbPath = wbPath & "\"
If Dir(wbPath & "\" & WBName) = "" Then Exit Function
arg = "'" & wbPath & "[" & WBName & "]" & wsName & "'!" & Range(cellRef).Address(True, True, xlR1C1)
On Error Resume Next
GetInfoFromClosedFile = ExecuteExcel4Macro(arg)
End Function
有必要在最后关闭另一个工作簿,并且不对当前工作簿进行任何更改。最起码,所有的修改都应该撤消,这样用户在选择文件后,只会看到我的确认消息和他电脑上新建的文件,他的Excel没有明显的区别。由于这将由既不是程序员也不是非常精通技术的人使用,因此任何弄乱他们当前可以同时用于某些事情的工作簿都会招来一些投诉。
此 Sub 将文件字符串和 sheet 名称作为参数来创建一个 .CSV 文件,扩展名 .csv 附加到其先前的名称、sheet 名称和扩展名。
Private Sub export_file_to_csv(src_path, sheet_name)
Application.DisplayAlerts = False
Set src_workbook = Workbooks.Open(src_path, , True)
src_workbook.Sheets(sheet_name).Activate
dst_path = src_path & " - " & sheet_name & ".csv"
src_workbook.SaveAs Filename:=dst_path, FileFormat:=xlCSV
src_workbook.Close
Application.DisplayAlerts = True
End Sub
然后您可以在另一个子程序中根据需要多次调用它。
Sub main_sub()
export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Europe"
export_file_to_csv "C:\Users\username\Desktop\maps.xlsx", "Asia"
export_file_to_csv "C:\Users\username\Documents\budget.xls", "Sheet1"
End Sub
只需将此代码放在另一个工作簿中,编辑将导出为 CSV 的文件的路径和 sheet 名称以及 运行 main_sub,它们应该出现在宏菜单。原始文件将保持不变,因为它们以只读方式打开。
希望对您有所帮助!