【问题标题】:Excel template: import CSV in batch modeExcel 模板:批量导入 CSV
【发布时间】:2014-12-22 13:58:05
【问题描述】:

我需要创建一个模板 (MS Excel) 用于在 Excel 中导入 CSV 数据(错误日志)。

  1. 我设置了条件格式,如果调用值大于 0,则单元格颜色必须自动变为红色,而对于 value=0,单元格颜色必须为绿色。

  2. 我将文件保存为 Excel 模板。

  3. 现在我想以批处理模式将 CSV 数据导入从上面的模板(带有条件格式)创建的新 XLSX 文档中,并自动保护结果。

我正在使用以下命令:

"C:\Program Files (x86)\Microsoft Office\Office14\EXCEL.EXE" /e "C:\Work\errors.log" /t "C:\Work\ABFTest.xltx"

该命令不会将数据加载到从 ABFTest.xltx 模板创建的新 Excel 文档中,而是打开两个 Excel 文件,一个包含 CSV 数据,另一个是从模板创建的文件。

这个问题有什么解决办法吗?

【问题讨论】:

  • @pnuts 感谢您的评论,是的,我已经这样做了,并相应地修改了问题(通过删除那部分问题)。

标签: excel csv excel-formula excel-2007 excel-2010


【解决方案1】:

@Mubeen Shahid 我根据您的原始请求编写了下面的代码 sn-p,因此它现在不能完全满足您的新条件。没用的就扔了吧。

代码将读取 .csv 文件并将其格式化为工作表 1 中的单列。对于此示例,.csv 文件称为“NosToCol.csv”,您必须提供自己的路径,如 所示。参数可以在代码sn-p中更改以适应。

Sub ReadCSVFile()

Dim ws As Worksheet
Dim fName As String, Txt1 As String, tmpvar As String
Dim fRow As Long, lRow As Long, Rw As Long
Dim Col As Long, rec As Long
Dim wrng As Range, cl As Range
Dim ifnum As Integer
Dim rearr(), wrarr

Set ws = Sheets("Sheet1")
fName = "<<yourpath>>\NosToCol.csv"
fRow = 2  'Row 2
Col = 1   'Col A
Txt1 = ""
ifnum = 1

    With ws
        lRow = .Cells(Rows.Count, Col).End(xlUp).Row

        'READ DATA FROM FILE
        Open fName For Input Access Read As #ifnum
        rec = 0
            Do While Not EOF(ifnum)
                Line Input #ifnum, tmpvar
                rec = rec + 1
                ReDim Preserve rearr(1 To rec)
                rearr(rec) = tmpvar
            Loop
            Close #ifnum

         'WRITE DATA TO RANGE
            For c = 1 To rec
                wrarr = Split(rearr(c), ",")
                Set wrng = .Range(.Cells(fRow, Col), .Cells(fRow + UBound(wrarr, 1), Col))
                '.Range(.Cells(fRow, Col), .Cells(fRow + UBound(wrarr, 1), Col)).Value = Application.Transpose(wrarr)
                wrng.Value = Application.Transpose(wrarr)
                c = c + 1
                    'MODIFY CELL COLOUR
                    For Each cl In wrng
                        If cl = 0 Then cl.Interior.Color = vbRed Else cl.Interior.Color = vbGreen
                    Next cl
            Next c
    End With
End Sub

【讨论】:

  • 非常感谢您的宝贵回复。我复制并修改了这段代码。如何编译+执行此代码?我有 Visual Studio,但是在尝试从这段代码中获取 exe 文件时,我遇到了很多错误 :( 我认为这是由于我缺乏经验 :(
  • 这是用 VBA 而不是 VB.Net 编写的。它将在 Excel 工作簿本身内运行。在 Excel 中选择开发人员选项卡并单击 Visual Basic 按钮。这将打开 IDE。从 IDE 的 Insert 菜单中选择 Module 以添加一个新的通用代码模块。将此代码剪切并粘贴到该模块中,然后通过单击 IDE 工具栏菜单上的绿色小三角形来运行它。
  • 再次感谢您的宝贵建议!我试图了解工作原理,并将扩展/修改它以创建多列的条件格式(如果可能)。无论如何,是否可以在批处理模式下运行此代码(即在 *.bat 脚本中指定 VBA 代码文件和 CSV,运行 *.bat 脚本并将结果保存在某处)?
  • 我认为您需要将此代码转换为 .net 语言才能实现此目的。您是否在 Excel 中运行过它并且对您有用?
  • 每种语言都有其差异,因此使用此代码的算法进行转换似乎是前进的方向。我认为您需要确定此答案是否在您原始 Q 的范围内满足您的需求,并可能在您的后续查询中开始另一篇文章。这应该可以确保您吸引到适当的专业知识来帮助您。
猜你喜欢
  • 2019-04-12
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 2020-11-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多