7

Excel ワークブックのセルに長いテキスト (1K から 2K 文字の長さのプレーン xml データ) を書き込んでいます。次のステートメントは、HRESULT から COM エラー例外をスローします: 0x800A03EC

range.set_Value(Type.Missing, data);

同じ xml を手動でコピーして Excel に貼り付けると、問題なく動作しますが、プログラム的には動作しません。テキストを100/300文字のように削除すると、正常に機能します。

4

6 に答える 6

5

次の KB 記事では、最大制限が 911 文字であることが説明されています。コードで同じことを確認しましたが、最大911文字の文字列で機能します。

http://support.microsoft.com/kb/818808

この記事に記載されている回避策では、911 文字を超えるセルを保持しないようにすることをお勧めします。ださいよ!

于 2009-06-24T10:08:02.400 に答える
5

このように回避するのはほぼ不可能な制限があります (私の記憶が正しければ 800 から 900 文字の間でした)。

ole 接続を使用して、SQL コマンドでデータを挿入してみてください。それはあなたにとってよりうまくいくかもしれません。その後、相互運用機能を使用して、必要に応じてフォーマットを行うことができます。

于 2009-06-24T08:54:30.847 に答える
4

良い 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 急いで編集したので、間違いがあるかもしれません。

于 2009-06-24T09:12:02.137 に答える
2

この制限を解決するには、一度に1つのセルのみを書き込み/更新し、Excelcomオブジェクトをすぐに破棄します。そして、次のセルを書き込んだり更新したりするために、オブジェクトを再作成します。

このソリューションがVS2010(VB.NETプロジェクト)でMicrosoft Excel 10.0オブジェクトライブラリ(Microsoft Office XP)を使用して機能していることを確認できます

于 2012-05-28T07:19:38.880 に答える
0

この制限は、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
于 2012-05-29T07:42:49.513 に答える
0

私はこれを自分で試したことはありませんが、私の調査によると、QueryTables を使用して 911 文字の制限を克服できることがわかっています。

これは、QueryTable のデータ ソースとしてレコード セットを使用し、それをスプレッドシートに追加することについて説明している、私が見つけた最初の投稿です: http://www.excelforum.com/showthread.php?t=556493&p=1695670&viewfull=1#ポスト1695670

QueryTables を使用するサンプル C# コードを次に示します

于 2012-06-01T18:16:10.333 に答える