excel自动全桌,剪纸

时间:2014-10-01 21:24:31

标签: excel vba excel-vba csv

首先让我解释一下我的情景。

我有一台带有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

感谢您的支持。

1 个答案:

答案 0 :(得分:0)

通过向Workbook_Open()模块中的ThisWorkbook例程添加代码,可以在打开工作簿时运行VBA例程。 (按 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对象hereWorkbooks.Open方法hereWorkbook.SaveAs方法here