UTF-8でCSV出力しろ!
|
過日、仕事場のWebアプリケーションにて、クソめんどくさい仕事をしていたときのこと。
業務内容はこうだ。
アプリの入力フォームに、〇〇〇依頼データとして、IDやら、名称やら、数量やら、その他、色々打ち込んで登録する。すなわち、入力/登録作業である。
その作業は日によって、1レコード分だけ打ち込むだけの日もあれば、50レコード以上打ち込まねばならん日もある。
俺は1年近くこれを手入力で続けていた......。ダサい!非常にダサすぎるゼ!
よって、俺はダサい俺から決別するために、アクションを起こした。
ExcelマクロVBAとWindows PowerShellの二刀流で成敗してシンゼヨウ!!
(左手の剣)
(右手の剣)
・Webアプリに自動で入力/登録するスクリプト(Windows PowerShell)
※IE自動制御によって、アプリの各オブジェクトに入力用CSVからデータを自動入力/登録
以下に、左手の剣について記す。
▼Excelシートはこんな感じ。
君の一番すきな人は、誰だ?!(^^)/
ここから、ExcelマクロVBAを使って、UTF-8でCSV出力するゼ!
▼ソースはこれ
Option Explicit
'-----------------------------------------------------
' 参照設定:Microsoft ActiveX Data Objects 6.1 Library
'-----------------------------------------------------
'最終列番号
Const MAXCOL As Integer = 3
'CSVファイル名
Const FILENAME As String = "入力用データ.csv"
'===========================================
' 処理名 :CSV作成処理
' 機能概要:UTF-8でCSV出力する
'===========================================
Sub createCSV()
'ストリーム、最終行番号
Dim outStream As New ADODB.Stream
Dim maxRow As Integer
'最終行取得
maxRow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row
'ストリーム準備
Dim i As Integer
Dim j As Integer
Dim line As String
With outStream
.Type = adTypeText
.Charset = "UTF-8"
.LineSeparator = adCRLF
.Open
End With
'全レコードへの処理
For i = 1 To maxRow
'1列目のみカンマなし
line = ActiveSheet.Cells(i, 1).Value
'2列目以降
For j = 2 To MAXCOL
line = line & "," & ActiveSheet.Cells(i, j).Value
Next j
'i行目のレコードをoutStreamに出力
outStream.WriteText line, adWriteLine
Next i
'出力CSV保存
outStream.SaveToFile ThisWorkbook.Path & "" & FILENAME, adSaveCreateOverWrite
'後処理
outStream.Close
Set outStream = Nothing
MsgBox "出力完了!", vbOKOnly + vbInformation, "CSV作成処理"
End Sub
・2重のForループの中で1列目と、2列目以降でカンマの処理に気をつける。
・CSVは存在していなければ、勝手に作る。存在していたら、問答無用で上書き。
・1列目の最終行でレコード数を決定するので、シートに悪戯落書き禁止!
・CSVは存在していなければ、勝手に作る。存在していたら、問答無用で上書き。
・1列目の最終行でレコード数を決定するので、シートに悪戯落書き禁止!
▼出力CSVだゼ!
UTF-8でCRLFになっているのを確認。
こっちもやってるゼ!
acoustic-groove2.hatenablog.com
|