我是一名新手程序员,试图自动执行一些重复的工作任务,这些任务应该由聪明的脚本代替人类完成。我做过一些VBA和Java,但非常基本的东西。
我们有一些经验证的在线表单生成的数据通过电子邮件发送到邮箱,然后邮件客户端(Outlook 2010)中的过滤器将其放入特定文件夹。我的目的是编写一些VBA,当触发时将检查该文件夹的内容,然后对于每个邮件项,将消息正文文本作为字符串,创建一个数组,然后将数组内容写入.csv文件。然后,我将有另一个应用程序(iMacros for Firefox)阅读csv并与内部企业webapp进行交互以完成其余工作。
我想我可以做所有这些,除了将数组内容写入csv。
我最好从查看代码示例(我确实试图理解MS对象模型文档),但我能找到的最好的VBA数组写入CSV是这样的:
'save the file
Open sFileName For Output As #7
For n = 0 To UBound(MyArray, 1)
Print #7, Format(MyArray(n, 0), "0.000000E+00")
Next n
Close #7
我认为这是VB而不是VBA,但这里的一般想法是否有效?或者,如果其他人有代码示例让我开始或任何其他指示,我将非常感激。
PS也见过How do I save a 2-dimensional array as a csv file?,但无法理解。
答案 0 :(得分:2)
以下代码适用于以CSV格式转换2D数组。我没有编写代码,但已对其进行了测试并且有效!
' SaveAsCSV saves an array as csv file. Choosing a delimiter different as a comma, is optional.
'
' Syntax:
' SaveAsCSV dMyArray, sMyFileName, [sMyDelimiter]
'
' Examples:
' SaveAsCSV dChrom, app.path & "\Demo.csv" --> comma as delimiter
' SaveAsCSV dChrom, app.path & "\Demo.csv", ";" --> semicolon as delimiter
'
' Rev. 1.00 [8 jan 2003]
' written by P. Wester
' wester@kpd.nl
Public Sub SaveAsCSV(MyArray() As Variant, sFilename As String, Optional sDelimiter As String = ",")
Dim n As Long 'counter
Dim M As Long 'counter
Dim sCSV As String 'csv string to print
On Error GoTo ErrHandler_SaveAsCSV
'check extension and correct if needed
If InStr(sFilename, ".csv") = 0 Then
sFilename = sFilename & ".csv"
Else
While (Len(sFilename) - InStr(sFilename, ".csv")) > 3
sFilename = Left(sFilename, Len(sFilename) - 1)
Wend
End If
'If MultiDimensional(MyArray()) = False Then '1 dimension
'save the file
' Open sFileName For Output As #7
' For n = 0 To UBound(MyArray(), 1)
' Print #7, Format(MyArray(n, 0), "0.000000E+00")
' Next n
' Close #7
'Else 'more dimensional
'save the file
Open sFilename For Output As #7
For n = 1 To UBound(MyArray(), 1)
sCSV = ""
For M = 1 To UBound(MyArray(), 2)
sCSV = sCSV & Format(MyArray(n, M)) & sDelimiter
Next M
sCSV = Left(sCSV, Len(sCSV) - 1) 'remove last Delimiter
Print #7, sCSV
Next n
Close #7
'End If
Exit Sub
ErrHandler_SaveAsCSV:
Close #7
答案 1 :(得分:1)
我不使用VB,所以我不确定输出#7的打开文件,但如果可行(用一些随机输出测试它),那么你的代码片段是正确的。唯一的事情是你应该在另外一个Print调用中添加一个“,”。
请确保在上一次迭代中不添加“,”。你可以通过添加一个If语句来检查是否n = UBound(MyArray) - 1(这是最后一个元素的索引。)
希望它有所帮助,
PM