1

さまざまな行と列のcsvを開き、行4列1から貼り付けるVBSriptを作成したいと思います。これまでのところ、私が書いたものは遅く、列の量がハードコードされています。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(wscript.Arguments(0))
objExcel.Visible = True
objExcel.Cells(1, 4).Value = wscript.Arguments(1)+" - "+wscript.Arguments(2)
objExcel.Cells(2, 4).Value = wscript.Arguments(3)

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.OpenTextFile (wscript.Arguments(4))
cCount = 1
rCount = 4

Do While objTextFile.AtEndOfStream <> True
        arrUserRecord = split(objTextFile.Readline, ",")
        Do While cCount<213
            objExcel.Cells(rCount, cCount).Value = arrUserRecord(cCount-1)
            cCount=cCount+1
        Loop
        cCount=1
        rCount=1+rCount
Loop
4

2 に答える 2

4

Excel は、「有効な CSV」として何を受け入れるかについてかなりこだわることができます。私は何度か次のことに頼らなければなりませんでした:

Const vbFormatStandard = 1
Const vbFormatText     = 2
Const vbFormatDate     = 4

Const xlDelimited      = 1
Const xlDoubleQuote    = 1

' change according to number/type of the fields in your CSV
dataTypes = Array( Array(1, vbFormatText) _
  , Array(2, vbFormatStandard) _
  , Array(3, vbFormatText) _
  , Array(4, vbFormatDate) _
  )

Set xl = CreateObject("Excel.Application")
xl.Visible = True

xl.Workbooks.OpenText "input.csv", , , xlDelimited, xlDoubleQuote, False _
  , False, True, , , , dataTypes
Set wb = xl.ActiveWorkbook
于 2012-10-19T08:15:43.207 に答える
1

有効な CSV ファイルであれば、Excel で直接開くことができます。したがって、VBscript を記述して、CSV ファイルをワークブックのように開くように Excel に指示するだけです。次に、必要なデータをそのブックからブックにコピーできます。


これを行う方法がわからない場合は、VBA が最適な方法ですが、VBscript でもモックアップできるはずです。確実にテストすることはできませんが、次のようになります。

Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open(wscript.Arguments(0))
objExcel.Visible = True
objExcel.Cells(1, 4).Value = wscript.Arguments(1) + " - " + wscript.Arguments(2)
objExcel.Cells(2, 4).Value = wscript.Arguments(3)

Set objWorksheet = objWorkbook.ActiveSheet

Set objWbkCsv = objExcel.Workbooks.Open(wscript.Arguments(4))
Set objWksCsv = objWbkCsv.Worksheets(1)
Set objRangeSource = objWksCsv.UsedRange

cCount = objRangeSource.Columns.Count
rCount = objRangeSource.Rows.Count + (4 - 1)
Set objRangeDest = objWorksheet.Range(objWorksheet.Cells(4, 1), objWorksheet.Cells(rCount, cCount))

objRangeSource.Copy objRangeDest
于 2012-10-18T19:13:33.830 に答える