xls(Excel 97 – 2003)形式のExcelファイルへのWrite Rangeについて

xlsx形式のExcelファイルをRead Rangeで読み、そこで取得したDataTableを別のxls形式のExcelファイルにWrite Rangeで転記したいと考えています。
しかし、Write Rangeの際に以下のエラーが発生します。

Source: Write Range
Message: The range does not exist
Exception Type: ExcelException

同じ転記処理をxlsx形式のExcelファイルで実行した場合はエラー発生せず転記できました。
xlsx形式のExcelファイルのデータをxls形式のExcelファイルへ一括で転記する方法はないでしょうか?

ご存知の方がいらっしゃいましたら、ご教授お願い致します。test20180316.zip (21.6 KB)

@sak さん、こんにちは
興味深いので調べてみました。過去の英語の投稿でも原因不明だったようです。
実験してわかったのは、xlsxでRead Rangeで行の範囲指定しないとデータテーブルはカラのセルの行も含んでいることです。
xlsは最大32767行ですので、超えてしまってエラーとなっていました。
ためしにsakさんのに新たなDataTableを追加し、下記のように空行以外をコピーしてそのDataTableをWriteRageしたら成功します。(でもそれなら最初からRead RangeではなくRead Cellで空行の無いDataTableを作成したほうが効率がよいかもしれませんね)


追伸:別の方法として、ReadRangeで “A1:A30000” のように想定されるかつxlsの上限の範囲を指定する方法でも回避できます。
ご参考まで

1 Like

@tango

お返事ありがとうございます。
やはり単純な転記はできなさそうですね…。
代替案のご提示までいただき、ありがとうございます。
For Each Rowでは空の行は含まれないようなので、
今回やりたかったこととしては対象行がそれほど多くもないということもあり
Read RangeしたあとFor Each Rowで1行ずつ別ファイルへ貼り付けることにしました。

@sakさん、こんにちは。
テストデータ拝見しました、同じファイルからの読み取るなら、
一回読み取ってからフィルターをかけた方が
Read Rangeにあまり困らないかと思いますが、いかがでしょうか。

Main.xaml (11.9 KB)

1 Like