0

首先让我们解释一下我的场景。

我有一个带有 PaperCut 免费版的 Windows 服务器。它给出一个“papercut-print-log-all-time.csv”作为输出。该输出始终由服务打开,每次有人打印它时都会计算并记录执行者和许多其他信息。

现在,我正在寻找某种类型的 excel 表,每次我打开 excel 时都会“自动将所有新寄存器添加到新表单中,以制作一些关于使用情况的图形。

诀窍在哪里?我不希望每次打开时都必须拉下公式来手动更新新寄存器。

我想需要制作某种宏(以前从未做过,但知道 c# 和 vb)但仍然不知道是否使用动态表和一些棘手的公式可以做到这一点..

“papercut-print-log-all-time.csv”格式的一个例子是:

Time    User    Pages   Copies  Printer FileName    Client  PaperFormat Lenguaje    Duplex  GrayScale   Format
11/27/2012 11:29    Mberiguette 2   1   Printer1    Microsoft Office Outlook - Memorando    client-pc1  Letter  PCL6    NOT DUPLEX  GRAYSCALE   120kb
11/27/2012 11:30    mabreu  1   1   Printer1    PDF Print   client-pc2  Letter  PCL6    NOT DUPLEX  GRAYSCALE   58kb
11/27/2012 11:30    mabreu  1   1   Printer1    PrintTest   client-pc2  Letter  PCL6    NOT DUPLEX  GRAYSCALE   21kb
11/27/2012 11:35    mabreu  1   1   Printer2    PrintTest   client-pc2  Letter  PCL6    NOT DUPLEX  GRAYSCALE   21kb
11/27/2012 11:35    Mberiguette 1   2   Printer2    Microsoft Word - Entrega factyras de Proveedor.doc  client-pc1  Letter  PCL6    NOT DUPLEX  GRAYSCALE   51kb

感谢您的支持。

4

1 回答 1

0

通过将代码添加到模块Workbook_Open()中的例程,您可以在打开工作簿时运行 VBA 例程。ThisWorkbook(按Alt-F11打开 VBA IDE 以将代码添加到模块。)

下面的代码:

  • 打开一个Scripting.TextStream对象以逐行读取 CSV 文件
  • TextStream 前进到之前未写入电子表格的第一行
  • 每个后续行都被读取并存储在一个String变量中
  • String被拆分为以逗号分隔的字段,结果存储在Array
  • 然后将其Array复制到电子表格
Option Explicit

Private Sub Workbook_Open()
    Call UpdateFromCSV("your path here\papercut-print-log-all-time.csv")

End Sub

Private Sub UpdateFromCSV(filePath As String)
    Dim ts As Object    'Scripting.TextStream
    Dim s As String
    Dim v As Variant
    Dim i As Long

    Set ts = CreateObject("Scripting.FileSystemObject").GetFile(filePath).OpenAsTextStream(ForReading, TristateUseDefault)

    For i = 1 To Application.ActiveSheet.UsedRange.SpecialCells(xlLastCell).Row
        ts.SkipLine
    Next i

    Do While Not ts.AtEndOfStream
        s = ts.ReadLine
        v = Split(s, ",")
        Application.ActiveSheet.Range(Application.ActiveSheet.Cells(i, 1), Application.ActiveSheet.Cells(i, 12)) = v
        i = i + 1
    Loop
    ts.Close

    Set ts = Nothing

End Sub

但是,如果您只想要一个包含 CSV 文件中所有值的具有写入权限的电子表格,则可以尝试以下操作。它只是以只读方式打开 CSV 文件并将其保存为 xlsx 文件。

Option Explicit

Public Sub OpenSaveCSVasXlsx()
    Dim wb As Workbook

    Set wb = Application.Workbooks.Open("your path here\papercut-print-log-all-time.csv", False, True, 2, , , True, , , , False, , False)
    wb.SaveAs "your path here\papercut-print-log-all-time.xlsx", xlOpenXMLWorkbook, , , , , , xlUserResolution

    Set wb = Nothing

End Sub

您可以在此处阅读有关Scripting.TextStream对象的更多信息、此处Workbooks.Open方法和此处Workbook.SaveAs方法。

于 2014-10-02T05:46:04.323 回答