Access VBA my code : output CSV from table or query. Welcome questions and opinions in the comments section, English OK.
標準モジュール
animalsテーブルの内容を加工して, my_settingsテーブルで指定したフォルダにCSVファイルとして保存します。実際、この程度の操作でしたらクエリで間に合いますが…
Option Compare Database
Public Sub result_output_csv()
Dim rec_output As New ADODB.Recordset
rec_output.Open "animals", CurrentProject.Connection, adOpenStatic, adLockReadOnly
SysCmd acSysCmdInitMeter, "Outputing CSV File Please Wait...", rec_output.RecordCount
Dim my_output_csv As New output_csv
my_output_csv.setup_items Array("animal_id", "type", "place")
Do While Not rec_output.EOF
If rec_output("place") = "Japan" Then
my_output_csv.put_log Array(rec_output("animal_name") & "-" & rec_output("animal_index"), _
rec_output("type"), "JPN"
End If
SysCmd acSysCmdUpdateMeter, rec_output.AbsolutePosition
rec_output.MoveNext
Loop
Dim csv_folder As String
csv_folder = Application.DLookup("setting_value", "my_settings", "setting_item='result_output_folder'")
my_output_csv.output_csv csv_folder & "\lovely_animals_" & Format(Now, "yyyymmdd_HHMMSS") & ".csv"
MsbBox "finished."
SysCmd acSysCmdClearStatus
End Sub
クラスモジュール
データをStringとして保存し、最後にCSVファイルに保存することで、レコードセット操作中のメモリ節約を狙っています。Save the data as a String and save it in the CSV file at the end, aiming at memory saving during Recordset operation.
Option Compare Database
Private log_data As String
'1st, setup items for first line of CSV file
'CSVファイルの1行目の項目を設定できます。テーブルにない項目もOK
Public Function setup_items(items_array)
log_data = ""
log_data = array_to_string_with_comma(items_array)
End Function
'2nd, put 1 line to string data(not write to CSV file directly, correct to one string)
'Arrayでデータを渡すと、改行とともにStringデータにコンマ区切りで格納します。
Public Function put_log(values_array)
log_data = log_data & vbCrLf & array_to_string_with_comma(values_array)
End Function
'finally, output all line to csv file
'ファイル名を指定して実行すると、項目と今までputしたデータをまとめてCSVに保存します。
Public Function output_csv(csv_filename)
Dim my_text As TextStream
Dim fso As New FileSystemObject
Set my_text = fso.CreateTextFile(csv_filename)
my_text.Write log_data
End Function
'array to string with comma
'Arrayデータをコンマ区切りのひとつのStringデータに変換する内部関数です
Private Function array_to_string_with_comma(input_array) As String
Dim result_string As String, input_val
For Each input_val In input_array
result_string = result_string & "," & input_val
Next
array_to_string_with_comma = Mid(result_string, 2, Len(result_string))
End Function
0 件のコメント:
コメントを投稿