2015-08-24 70 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;