【问题标题】:How can I automate conversion of csv file to macro enabled excel?如何自动将 csv 文件转换为启用宏的 excel?
【发布时间】:2012-03-15 06:53:33
【问题描述】:

我有一个包含许多列的 CSV 文件,我想将这些列导入 Excel,然后选择所需的列并绘制图表。

我可以在 .xlms(启用宏的 Excel 文件)中完成所有这些操作,但我想编写一个批处理脚本来自动将 csv 转换为 xlsm,然后将我的宏添加到其中。

如果我在 Excel 之外将宏保存为 .vbs 文件,是否可以将它们添加到 Excel 文件中?

选项显式 出错时继续下一步

Excel 宏示例

Sub ExcelMacroExample() 
Dim xlApp 
'Fire up XL
Set xlApp = CreateObject("Excel.Application") 
xlApp.DisplayAlerts = False
'Open the csv file and parse it into XL format
xlApp.Workbooks.Open "E:\sysmon.csv", 0, True

'OpenText bombed right away, dont know what is wrong here?
'xlApp.Workbooks.OpenText "E:\\sysmon.csv", , , xlDelimited, xlTextQualifierNone, False, False, False, True

' Save into macro enabled template, previously created with the macro
xlApp.ActiveWorkbook.SaveAs "E:\sysmon.xltm", xlOpenXMLTemplateMacroEnabled

'Run the macro  
'xlApp.Run "Memory"

xlApp.ActiveWorkbook.Close
xlApp.Quit 

Set xlApp = Nothing 
End Sub 

我的内存宏保存在 sysmon.xltm 中

Sub Memory()
'
' Memory Macro
'      
    Range(Cells(1, 2), Cells(ActiveSheet.UsedRange.Rows.Count, 5)).Select
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    ActiveChart.SetSourceData Source:=Range(Cells(1, 2), Cells(ActiveSheet.UsedRange.Rows.Count, 5))
    ActiveChart.PlotArea.Select
    ActiveChart.ApplyLayout (2)
    ActiveChart.ApplyLayout (3)
    ActiveChart.ChartTitle.Select
    ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="Memusage"
    With ActiveWorkbook.PublishObjects.Add(xlSourceChart, "E:\tetsysmon.mht", _
        "Memusage", "", xlHtmlStatic, "tetsysmon_5126", "")
        .Publish (True)
        .AutoRepublish = False
    End With
    ChDir "E:\"
 End Sub

【问题讨论】:

    标签: vba csv excel-2010


    【解决方案1】:

    假设您的 csv 文件和关联的宏每次看起来都一致,请考虑以下情况:

    与其转换 csv 并添加宏,不如考虑将 csv 中的数据添加到具有现有宏的现有 excel 文件中。这要容易得多。

    事先用宏创建excel文件。在您的脚本中打开现有的 excel 文件,使用 csv 数据对其进行更新,然后“另存为”一个新文件。

    如果宏和 csv 格式确实发生了巨大变化,那么这可能并不理想。如果您发布一些示例 csv 数据和 vbs,那么我可能会给您一个更具体的答案。

    【讨论】:

    • 我已经用代码 sn-p 更新了我的帖子,你能帮忙吗?谢谢!
    • 我今天有事要做,我创建了一个中间的 CSVImporter.xlsm,其中包含一个宏来将 csv 保存到 xlsm。然后我注入了宏(使用 objworkbook.VBProject.VBComponents.Add(1))将我的图表绘制到上面创建的 xlsm 中,然后保存并内联运行这个注入的宏。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 2021-07-21
    • 2011-07-18
    • 1970-01-01
    相关资源
    最近更新 更多