Excel ワークブックのセルに長いテキスト (1K から 2K 文字の長さのプレーン xml データ) を書き込んでいます。次のステートメントは、HRESULT から COM エラー例外をスローします: 0x800A03EC
range.set_Value(Type.Missing, data);
同じ xml を手動でコピーして Excel に貼り付けると、問題なく動作しますが、プログラム的には動作しません。テキストを100/300文字のように削除すると、正常に機能します。
Excel ワークブックのセルに長いテキスト (1K から 2K 文字の長さのプレーン xml データ) を書き込んでいます。次のステートメントは、HRESULT から COM エラー例外をスローします: 0x800A03EC
range.set_Value(Type.Missing, data);
同じ xml を手動でコピーして Excel に貼り付けると、問題なく動作しますが、プログラム的には動作しません。テキストを100/300文字のように削除すると、正常に機能します。
次の KB 記事では、最大制限が 911 文字であることが説明されています。コードで同じことを確認しましたが、最大911文字の文字列で機能します。
http://support.microsoft.com/kb/818808
この記事に記載されている回避策では、911 文字を超えるセルを保持しないようにすることをお勧めします。ださいよ!
このように回避するのはほぼ不可能な制限があります (私の記憶が正しければ 800 から 900 文字の間でした)。
ole 接続を使用して、SQL コマンドでデータを挿入してみてください。それはあなたにとってよりうまくいくかもしれません。その後、相互運用機能を使用して、必要に応じてフォーマットを行うことができます。
良い Ole と Excel の記事:http://support.microsoft.com/kb/316934
次のコードは、成功した行数であるプライベート変数を更新し、Excel ファイルへのパスである文字列を返します。
Pathfromを使用することを忘れないでくださいSystem.IO;。
string tempXlsFilePathName;
string result = new string;
string sheetName;
string queryString;
int successCounter;
// set sheetName and queryString
sheetName = "sheetName";
queryString = "CREATE TABLE " + sheetName + "([columnTitle] char(255))";
// Write .xls
successCounter = 0;
tempXlsFilePathName = (_tempXlsFilePath + @"\literalFilename.xls");
using (OleDbConnection connection = new OleDbConnection(GetConnectionString(tempXlsFilePathName)))
{
OleDbCommand command = new OleDbCommand(queryString, connection);
connection.Open();
command.ExecuteNonQuery();
yourCollection.ForEach(dataItem=>
{
string SQL = "INSERT INTO [" + sheetName + "$] VALUES ('" + dataItem.ToString() + "')";
OleDbCommand updateCommand = new OleDbCommand(SQL, connection);
updateCommand.ExecuteNonQuery();
successCounter++;
}
);
// update result with successfully written username filepath
result = tempXlsFilePathName;
}
_successfulRowsCount = successCounter;
return result;
NB 急いで編集したので、間違いがあるかもしれません。
この制限を解決するには、一度に1つのセルのみを書き込み/更新し、Excelcomオブジェクトをすぐに破棄します。そして、次のセルを書き込んだり更新したりするために、オブジェクトを再作成します。
このソリューションがVS2010(VB.NETプロジェクト)でMicrosoft Excel 10.0オブジェクトライブラリ(Microsoft Office XP)を使用して機能していることを確認できます
この制限は、Excel 2007/2010 で削除されたはずです。VBAを使用すると、次のように動作します
Sub longstr()
Dim str1 As String
Dim str2 As String
Dim j As Long
For j = 1 To 2000
str1 = str1 & "a"
Next j
Range("a1:a5").Value2 = str1
str2 = Range("a5").Value2
MsgBox Len(str2)
End Sub
私はこれを自分で試したことはありませんが、私の調査によると、QueryTables を使用して 911 文字の制限を克服できることがわかっています。
これは、QueryTable のデータ ソースとしてレコード セットを使用し、それをスプレッドシートに追加することについて説明している、私が見つけた最初の投稿です: http://www.excelforum.com/showthread.php?t=556493&p=1695670&viewfull=1#ポスト1695670。
QueryTables を使用するサンプル C# コードを次に示します。