首先让我解释一下我的情景。
我有一台带有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
感谢您的支持。
答案 0 :(得分:0)
通过向Workbook_Open()
模块中的ThisWorkbook
例程添加代码,可以在打开工作簿时运行VBA例程。 (按 Alt - F11 打开VBA IDE以向模块添加代码。)
以下代码:
Scripting.TextStream
对象,逐行读取CSV文件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
对象here,Workbooks.Open
方法here和Workbook.SaveAs
方法here。