2010-05-21 30 views
50

A continuación se muestra el código que estoy usando para cargar los datos en una hoja de cálculo de Excel, pero estoy un vistazo a tamaño automático de la columna después de cargar los datos. ¿Alguien sabe la mejor manera de ajustar automáticamente las columnas?¿Cómo puedo auto tamaño columnas a través de los objetos de interoperabilidad de Excel?

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(); 
     } 
    } 
} 

Respuesta

82

Añadir esto a su punto de TODO:

aRange.Columns.AutoFit();

+1

También hay un 'aRange.Rows.AutoFit()' también. – krillgar

+6

no funciona para mí. – levi

+4

Usa la respuesta @nawfal: aRange.EntireColumn.AutoFit(); –

23

esto podría ser demasiado tarde, pero si se agrega

worksheet.Columns.AutoFit(); 

o

worksheet.Rows.AutoFit(); 

también funciona.

+0

Me gusta esto mejor. Esto es más útil si no le importan las columnas específicas que necesitan cambiar de tamaño y solo quiere que toda la hoja sea autofit. – ThePersonWithoutC

2

Este método abre el archivo de Excel ya creado, Autofit todas las columnas de todas las hojas basadas en 3ª fila. Como se puede ver se selecciona Rango De "A3 a K3" en Excel.

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); 
     } 
    } 
Cuestiones relacionadas