it-swarm.com.de

Wie kann ich die Größe von Spalten durch die Excel-Interop-Objekte automatisch anpassen?

Unten ist der Code, den ich zum Laden der Daten in ein Excel-Arbeitsblatt verwende, aber ich versuche, die Spalte nach dem Laden der Daten automatisch in der Größe anzupassen. Kennt jemand den besten Weg, um die Spalten automatisch in der Größe anzupassen?

using Microsoft.Office.Interop;

public class ExportReport
{
    public void Export()
    {
        Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
        Excel.Workbook wb;
        Excel.Worksheet ws;
        Excel.Range aRange;
        object m = Type.Missing;
        string[,] data;
        string errorMessage = string.Empty;
        try
        {
            if (excelApp == null)
                throw new Exception("Excel could not be started.");

            // Create the workbook and worksheet.
            wb = excelApp.Workbooks.Add(Office.Excel.XlWBATemplate.xlWBATWorksheet);
            ws = (Office.Excel.Worksheet)wb.Worksheets[1];

            if (ws == null)
                throw new Exception("Could not create worksheet.");

            // Set the range to fill.
            aRange = ws.get_Range("A1", "E100");

            if (aRange == null)
                throw new Exception("Could not get a range.");

            // Load the column headers.
            data = new string[100, 5];
            data[0, 0] = "Column 1";
            data[0, 1] = "Column 2";
            data[0, 2] = "Column 3";
            data[0, 3] = "Column 4";
            data[0, 4] = "Column 5";

            // Load the data.
            for (int row = 1; row < 100; row++)
            {
                for (int col = 0; col < 5; col++)
                {
                    data[row, col] = "STUFF";
                }
            }

            // Save all data to the worksheet.
            aRange.set_Value(m, data);
            // Atuo size columns
            // TODO: Add Code to auto size columns.

            // Save the file.
            wb.SaveAs("C:\Test.xls", Office.Excel.XlFileFormat.xlExcel8, m, m, m, m, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, m, m, m, m, m);
            // Close the file.
            wb.Close(false, false, m);
        }
        catch (Exception) { }
        finally
        {
            // Close the connection.
            cmd.Close();
            // Close Excel.
            excelApp.Quit();
        }
    }
}
61
norlando

Fügen Sie dies an Ihrem TODO-Punkt hinzu:

aRange.Columns.AutoFit();

101
Igby Largeman

Dies könnte zu spät sein, aber wenn Sie hinzufügen

 worksheet.Columns.AutoFit();

oder

 worksheet.Rows.AutoFit();

es funktioniert auch.

32
Matheus Shita

Auch da ist

aRange.EntireColumn.AutoFit();

Siehe Was ist der Unterschied zwischen Range.Columns und Range.EntireColumn .

26
nawfal

Schauen Sie sich diesen Artikel an, er passt nicht genau zu Ihrem Problem, passt aber dazu:

2
Kyle Rozendo

Diese Methode öffnet eine bereits erstellte Excel-Datei. Alle Spalten aller Arbeitsblätter werden basierend auf . Zeile automatisch angepasst. Wie Sie sehen, ist in Excel der Bereich Von "A3 bis K3" ausgewählt.

 public static void AutoFitExcelSheets()
    {
        Microsoft.Office.Interop.Excel.Application _Excel = null;
        Microsoft.Office.Interop.Excel.Workbook excelWorkbook = null;
        try
        {
            string ExcelPath = ApplicationData.PATH_Excel_FILE;
            _Excel = new Microsoft.Office.Interop.Excel.Application();
            _Excel.Visible = false;
            object readOnly = false;
            object isVisible = true;
            object missing = System.Reflection.Missing.Value;

            excelWorkbook = _Excel.Workbooks.Open(ExcelPath,
                   0, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "",
                   true, false, 0, true, false, false);
            Microsoft.Office.Interop.Excel.Sheets excelSheets = excelWorkbook.Worksheets;
            foreach (Microsoft.Office.Interop.Excel.Worksheet currentSheet in excelSheets)
            {
                string Name = currentSheet.Name;
                Microsoft.Office.Interop.Excel.Worksheet excelWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)excelSheets.get_Item(Name);
                Microsoft.Office.Interop.Excel.Range excelCells =
(Microsoft.Office.Interop.Excel.Range)excelWorksheet.get_Range("A3", "K3");
                excelCells.Columns.AutoFit();
            }
        }
        catch (Exception ex)
        {
            ProjectLog.AddError("Excel ERROR: Can not AutoFit: " + ex.Message);
        }
        finally
        {
            excelWorkbook.Close(true, Type.Missing, Type.Missing);
            GC.Collect();
            GC.WaitForPendingFinalizers();
            releaseObject(excelWorkbook);
            releaseObject(_Excel);
        }
    }
2
Charlie