- - PR -
C# Excelファイル作成時にOutOfMemoryException発生
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-05-23 16:23
開発環境: VS2003, OFFICE2003
言語: C# OS: WIndows XP Pro SP2 いつもお世話になっております。 下記ソースの末尾にある"sheet.Cells[1, 2] = data;"の部分で、 OutOfMemoryExceptionが発生しますが、原因が特定できません。 どなたか分かる方いらっしゃいますか。 ********************ここから******************** Excel.Application app = new Excel.Application();; app.Visible = true; Excel.Workbook workbook = app.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet); workbook.Activate(); Excel.Sheets sheets = workbook.Sheets; Object after = sheets[sheets.Count]; Object before = System.Reflection.Missing.Value; Excel.Worksheet sheet = (Excel.Worksheet)sheets[sheets.Count]; string data = @"-------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- ---------------------------------------------------------------- -------------------------------------------------------------------"; // 本当は一行です。 sheet.Cells[1, 2] = data; ********************ここまで******************** 調査の結果、以下のことまで分かっています。 1. -(ハイフン)が1025文字以上だと発生する。 2. -(ハイフン)が1024文字以下の場合や、 -(ハイフン)ではなく"a"や"あ"が1025文字以上の場合には発生しない。 3. アプリケーションから、セルに入力できる最大文字数は2046文字である。 4. 例外は、mscorlib.dllで発生している。 5. -(ハイフン)が、-(マイナス)と認識されているわけではない。 (セルの書式設定で表示形式を文字列にしたが、変化なし) 以上、宜しくお願い致します。 | ||||
|
投稿日時: 2007-05-24 10:55
1025文字でエラーなので数式として中途半端な自動認識?がされてるようですねぇ。
結果は文字列でも途中でナニかやってるのかも。 @"----〜 を @"'----- とかにしてもダメですかね? | ||||
|
投稿日時: 2007-05-24 12:10
返信ありがとうございます。
@"----〜 を @"'----- とすればOutOfMemoryExceptionは発生しません。 現在は、上記の方法で本現象を回避しようと調整中です。 ですが、上記方法だとエクセルの該当セルをクリックした時に、 先頭に'(クォーテーション)が見えてしまうことが気になります。 見えなくする方法があれば良いんですが、ご存知ないですか? | ||||
|
投稿日時: 2007-05-24 13:44
>セルの書式設定で表示形式を文字列にしたが、変化なし
これはプログラムからNumberFormatプロパティで設定したのですか? それともExcelのシートに設定しておいたのですか? プログラムから設定してダメなら∩(・ω・)∩<オテアゲーです。 | ||||
|
投稿日時: 2007-05-24 14:17
セルの書式は関係ありません。
この場合 (先頭にハイフンがある限り) 式の評価が行われます。 式が評価されるので 1,024 という制限が付きまとうハズです。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-05-24 14:23
プログラムからNumberFormatで設定しました。
最初のソースの" sheet.Cells[1, 2] = data;"の部分を 下記のようにしましたが、結果は変わりませんでした。 --------------------------------------------------- sheet.get_Range("B2", "B2").NumberFormat = "@"; sheet.get_Range("B2", "B2").Value2 = data; --------------------------------------------------- この事象が.Net Framework1.1のバグであるならば、 今回は'クォーテーションで暫定的に回避する ものしかないかなとも考えています。 しかし、Microsoftのサポートオンラインでも調べたものの 該当する事象を確認することはできませんでした。 バグなのかどうかや、原因が何かくらいのことは説明できるように なりたいのですが。 | ||||
|
投稿日時: 2007-05-24 14:30
.NET Framework というより、Excel の制限によるものです。 OutOfMemoryException というのはちょっと違ってるとは思いますが。 (COMException / HRESULT からの例外ではないのですね) _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2007-05-24 14:31
お返事ありがとうございます。
ということは、本現象は.net側の仕様であり、 1025文字以上のハイフンを扱いたい場合は、先頭文字はハイフン以外で 始めなければいけないという解釈で良いでしょうか。 |