2

私の sqldatareader は、最大 200 行のデータを返しています。これらの行の約半分には、xml ドキュメント全体を含む列があります。この列が原因で autofit() メソッドがハングしていると思います。これを例外をスローするか、正常に完了するにはどうすればよいですか。どれでも構いません。この [自動化された] プログラムを終了する必要があるだけです。

Excel.Application xl = null;
            Excel._Workbook wb;
            Excel._Worksheet ws;

            try
            {
                xl = new Microsoft.Office.Interop.Excel.Application();
                xl.Visible = false;

                while (reader.HasRows && !done)
                {
                    wb = (Excel._Workbook)(xl.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet));
                    ws = (Excel._Worksheet)wb.ActiveSheet;

                    // Insert column headers
                    for (int counter = 0; counter < reader.FieldCount; counter++)
                        ws.Cells[1, counter + 1] = reader.GetName(counter);

                    // Write the data to the excel file
                    while (reader.Read())
                    {
                        for (int counter = 1; counter <= reader.FieldCount; counter++)
                        {
                            // Need to format this column so excel doesn't change how it looks
                            if (report.ReportName == "RPTAAMVANetBatch" && reader.GetName(counter - 1) == "CorrelationID")
                                ws.Cells[rowCounter, counter] = String.Format("''{0}'", reader.GetValue(counter - 1));
                            else
                                ws.Cells[rowCounter, counter] = reader.GetValue(counter - 1);
                        }
                        rowCounter++;
                    }

                    RecordsProcessed = rowCounter - 1;

                    // Format the excel file to liking
                    ws.get_Range(ws.Cells[1, 1], ws.Cells[rowCounter - 1, reader.FieldCount]);
                    ws.Columns.AutoFit();
4

1 に答える 1

2

上記のコメントに加えて、数日前に作成したこの特定のサンプル ファイルを使用しています。このファイルには 100 行あり、中Col Eには複数の電子メールの本文全体があります ( ID を保護するために赤いボックスを配置し、メールの内容

ここに画像の説明を入力

Eこれは、列の自動調整にかかる時間を確認するために実行した単純な VBA コードです。

Sub Test()
    Dim startTime As String
    Dim endTime As String

    startTime = Now

    Columns("E:E").EntireColumn.AutoFit

    endTime = Now

    Debug.Print "The process started at " & startTime & " and got over at " & endTime
End Sub

スクリーンショット:

ここに画像の説明を入力

200 行あり、各 Excel セルに私のデータよりも多くのデータがある可能性があるため、プログラムにより多くの時間がかかっています。

それで、解決策は何ですか?

私が考えることができる最善の解決策は、巨大なデータを書き込む前に列を最大(254.86) に広げることです。このようなもの

        Excel.Range Rng = ws.get_Range("E:E",System.Type.Missing);

        Rng.EntireColumn.ColumnWidth = 254;

: その列またはワークシート全体に Autofit を使用しないでください。使用する必要がある場合はAutofit、分割してください。たとえば、私の場合、列 1 から 4 まで、次に 6 から最後の列まで Autofit を実行します。

于 2013-04-05T20:13:28.740 に答える