2015-08-24 65 views
-1

我正在將(Stimulsoft)報告導出爲ex​​cel,但某些單元格文本變長,並導致單元格之間的水平對齊失敗。 很明顯,文字包裝可以放大細胞高度,但不會將其傳播到同一行中的所有其他細胞。Stimulsoft:使Excel列自動寬度

我設法讓它更可靠,在所有單元格中將CanGrow設置爲false,但這樣用戶需要在excel打開後自動適應列寬。

有什麼辦法可以讓Excel自動調整所有列的寬度?

回答

0

有,而且很簡單。

Private Sub AutoFitCols() 

     Worksheets("Sheet1").Columns.AutoFit 

End Sub 

只需將Sheet1替換爲您希望列自動適應的工作表名稱即可。

如果你想這個自動發生在打開工作簿時,您可以將代碼在Workbook_Open事件,像這樣:

Private Sub Workbook_Open() 

     Worksheets("Sheet1").Columns.AutoFit 

End Sub 

只要確保代碼是ThisWorkbook代碼模塊中。

0

在excel中選擇所有工作表(在左上方)並雙擊列b和c之間的連線。 在VB:

Cells.Select 
    Cells.EntireColumn.AutoFit 
0

鍵盤快捷鍵來自動適應任何電子表格

按Ctrl + A(全選)

ALT + H + O + I(自動調整列寬)

所有列
0

解決了它,下面是未來參考的源代碼。 感謝@Soulfire指出正確的方向。

爲了開始,我甚至沒有使用Interop,因爲要求剛纔陳述我需要將它保存到Excel。

我聯繫Stimulsoft和他們指着我it cannot be done

由於文件被創建我增加了功能,要求用戶打開它之前它不可能是多恩。

using Excel = Microsoft.Office.Interop.Excel; 
// Do lots of Stuff 

       SaveFileDialog saveFD = new SaveFileDialog(); 

       saveFD.Filter = "Excel Files|*.xlsx;*.csv;*.xls|All files|*.*"; 
       saveFD.FilterIndex = 1; 
       saveFD.RestoreDirectory = true; 
       saveFD.FileName = String.Format("MySavedFile_{0:yyyyMMddHHmmss}.xls", DateTime.Now); 

       if (saveFD.ShowDialog() == DialogResult.OK) 
       { 
        // In this example report is derived from the DevXpress XtraReport class 
        report.ExportToXls(saveFD.FileName); 

        // sanity note:Mensagem is a derived from devXpress XtraMessageBox 
        if (Mensagem.Confirm("File saved! Open it?")) 
        { 
         try 
         { 
          var excelApp = new Excel.Application(); 
          excelApp.Visible = true; 

          var customEvent = new Excel.AppEvents_WorkbookOpenEventHandler(CustomWorkbookOpenEvent); 

          excelApp.WorkbookOpen += customEvent; 

          excelApp.Workbooks.Open(saveFD.FileName, 
          Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
          Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
          Type.Missing, Type.Missing, Type.Missing, Type.Missing, 
          Type.Missing, Type.Missing);} 
         catch (Exception) 
         { 
          Mensagem.Erro("Excel Failed to Open"); 
         } 
        } 
       } 

棘手的部分是鍛鍊COM對象。

private void CustomWorkbookOpenEvent(Excel.Workbook wb) 
{ 
    Excel._Worksheet sheet = (Excel.Worksheet)wb.ActiveSheet; 
    sheet.Columns.AutoFit(); 
} 

編輯

我們發現互操作一段時間後,對我們來說是非常糟糕的(部署在許多用戶提供了許多Office版本,DLL地獄等)。

我們fonns NetOffice是一個很好的選擇。 剛剛更換了下面3行:

using Excel = NetOffice.ExcelApi; 
/* ... */ 

           var customEvent = new Excel.Application_WorkbookOpenEventHandler(CustomWorkbookOpenEvent); 
           excelApp.WorkbookOpenEvent += customEvent;