微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将数据从不断追加的文件分离到新文件中

我正在使用macros将Microsoft Access数据库中的表导出到csv文件以导入到MysqL数据库中。 我最终使用了一个batch file,在导出之前将一个标记放置在文本文件中,然后将最后一个标记之后的所有内容放到一个文件中。 这工作正常,除了访问不附加的事实,但每次都会重新创build文件,所以不可能使用任何types的标记

有没有什么办法,使用访问或batch file或其他方式:a)强制访问附加到文件,或放置自己的标记,或b)每次导出到不同的文件,可能文件名是variables如date,或c)通过外部操作克服这种行为

批量(Windows)执行脚本等请求并input答案

按发生次数sorting

如何在WSH下pipe理文件和目录?

打开它后,编辑目录中的每个文件

如何在多台机器上远程修改WinRM服务的凭证

而不是使用宏导出表,您可以简单地创建一些代码来打开文件,并将数据附加到它。

如何使用

只需将代码复制到应用程序中的VBA模块,并像这样调用它:

' Export the Table "Orders" to "orders.csv",appending the data to the ' ' existing file if there is one. ' ExportQueryToCSV "Orders","C:orders.csv",AppendToFile:=True ' Export the result of the query to "stock.csv" using tabs as delimiters ' ' and no header or quotes around strings ' ExportQueryToCSV "SELECT * FROM Stock WHERE PartID=2",_ "C:stock.csv",_ AppendToFile:=False,_ IncludeHeader:=False,_ Delimiter:=chr(9),_ QuoteString:=false

'----------------------------------------------------------------------------' ' Export the given query to the given CSV file. ' ' ' ' Options are: ' ' - AppendToFile : to append the record to the file if it exists instead of ' ' overwriting it (default is false) ' ' - Delimiter : what separator to use (default is the coma) ' ' - QuoteString : Whether string and memo fields should be quoted ' ' (default yes) ' ' - IncludeHeader: Whether a header with the field names should be the first ' ' line (default no) ' ' Some limitations and improvements: ' ' - Memo containing line returns will break the CSV ' ' - better formatting for numbers,dates,etc ' '----------------------------------------------------------------------------' Public Sub ExportQueryToCSV(Query As String,_ FilePath As String,_ Optional AppendToFile As Boolean = False,_ Optional Delimiter As String = ",",_ Optional QuoteStrings As Boolean = True,_ Optional IncludeHeader As Boolean = True) Dim db As DAO.Database Dim rs As DAO.RecordSet Set db = CurrentDb Set rs = db.OpenRecordset(Query,dbOpenSnapshot) If Not (rs Is nothing) Then Dim intFile As Integer ' Open the file,either as a new file or in append mode as required ' intFile = FreeFile() If AppendToFile And (Len(Dir(FilePath,vbnormal)) > 0) Then Open FilePath For Append As #intFile Else Open FilePath For Output As #intFile End If With rs Dim fieldbound As Long,i As Long Dim record As String Dim field As DAO.field fieldbound = .Fields.count - 1 ' Print the header if required ' If IncludeHeader Then Dim header As String For i = 0 To fieldbound header = header & .Fields(i).Name If i < fieldbound Then header = header & Delimiter End If Next i Print #intFile,header End If ' print each record' do while Not .EOF record = "" For i = 0 To fieldbound Set field = .Fields(i) If ((field.Type = dbText) Or (field.Type = dbMemo)) And QuoteStrings Then record = record & """" & Nz(.Fields(i).value,"") & """" Else record = record & Nz(.Fields(i).value) End If If i < fieldbound Then record = record & Delimiter End If Set field = nothing Next i Print #intFile,record .MoveNext Loop .Close End With Set rs = nothing Close #intFile End If Set rs = nothing Set db = nothing End Sub

请注意,这并不完美,您可能需要修改代码以反映您希望如何格式化数据,但在大多数情况下,认值应该没问题。

a)强制访问追加到文件,或者放置自己的标记

不。导出期望每次写入一个全新的文件,并且如果该文件已经存在,则存在问题。

b)每次导出到不同的文件,可能文件名是一个变量,如日期

是的,建立路径/文件名作为一个字符串,并附加日期/时间到最后

c)通过外部操纵克服这种行为

那么,你可以转储一个虚拟文件的新东西,然后使用批处理脚本或系统调用

echo marker >> goodfile.csv type dummy >> goodfile.csv del dummy

然而,如果你只是想添加新的记录,更好的方法是只处理虚拟文件,而不是试图寻找最后的标记,并处理下面的所有内容

您也可以使用VBScript来执行您用于导出的查询,并将这些记录附加到现有文件

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐