コレクションに大量データを突っ込んで、Excel VBOのWrite Collectionで貼り付けようとしたらフリーズしました。。。
データ量は2000件くらいだったかと思います。
何とかフリーズしない方法がないか、考えてみました。
検証1. CSVにして貼り付ける
大量データをCSVデータ化した後、セルにペタッと貼り付けてはどうか?
今回は大量データのコレクションを用意する必要があったため、Excelに予め2000行のデータを用意しておき、コレクションとして読み込ませます。
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F3cf9c9a5-d2d1-dd20-5c4f-a814ca732fb5.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=325a03d3ef076f74b48ca6ffd1cd16f9)
コードステージに、コレクションからCSVに変換するコードを用意して実行したところ、OutOfMemoryで落ちました。断念。。。
Dim count As Long = 0
For Each r As DataRow In Collection_In.Rows
Dim recordCsv As String
For Each c As DataColumn In Collection_In.Columns
If count = 0 Then
recordCsv = recordcsv & c.ColumnName + ","
Else
recordCsv = recordcsv & r(c.ColumnName) + ","
End If
Next
result = result & recordCsv.Substring(0, recordCsv.length-1) & Environment.NewLine
Next
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F97b5ea20-efa7-8bff-adf6-753dba4ee5ce.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=f6ecadb79088d993862e39fd6cff2192)
検証2. データを小分けにする
結果的に、この方法で最後まで実行することができました。
より速い方法はありそうですが、取り急ぎフリーズせずに処理を完遂できたのでOKとします(笑)
入力
![image.png](https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-image-store.s3.ap-northeast-1.amazonaws.com%2F0%2F186221%2F6661aa60-ef8d-5162-e0b6-40743fcd4ecc.png?ixlib=rb-1.2.2&auto=format&gif-q=60&q=75&s=a9847bd63f96b6c32e77fad167588e9a)
オブジェクト全体像
Inputの「分割行数」で設定した行数単位でExcelに貼り付けていきます。
ExcelVBOの「Go To Next Empty Cell Down」は空セルを上から探していくアクションです。
値が入っているセルのうち、最も右下のセルを取得してしまいます。なので、A列に修正する処理を入れて列を固定するようにしています。
その他、細かい実装はGitHubにアップしているサンプルをご覧下さい。
![](https://falcslab.com/wp-content/uploads/2020/05/image-55.png)
サンプル
https://github.com/falcslab/blueprism/tree/collection
BPA オブジェクト – Excelにコレクションを貼り付ける.xml