C# Stimulsoft:使Excel列自动变宽

C# Stimulsoft:使Excel列自动变宽,c#,excel,event-handling,stimulsoft,netoffice,C#,Excel,Event Handling,Stimulsoft,Netoffice,我正在将(Stimulsoft)报告导出到excel,但某些单元格文本变长,导致单元格之间的水平对齐失败。 很明显,单词包装会扩大单元格高度,但不会将其扩展到同一行中的所有其他单元格 我设法使它更可靠,在所有单元格中将CanGrow设置为false,但这样用户需要在打开excel后手动自动调整列宽 有没有办法告诉Excel自动调整所有列的宽度?有,而且相当简单 Private Sub AutoFitCols() Worksheets("Sheet1").Columns.Auto

我正在将(Stimulsoft)报告导出到excel,但某些单元格文本变长,导致单元格之间的水平对齐失败。 很明显,单词包装会扩大单元格高度,但不会将其扩展到同一行中的所有其他单元格

我设法使它更可靠,在所有单元格中将
CanGrow
设置为false,但这样用户需要在打开excel后手动自动调整列宽


有没有办法告诉Excel自动调整所有列的宽度?

有,而且相当简单

Private Sub AutoFitCols()

        Worksheets("Sheet1").Columns.AutoFit

End Sub
只需将
Sheet1
替换为要自动调整列的工作表的名称即可

如果希望在打开工作簿时自动执行此操作,可以将代码放置在
workbook\u Open
事件中,如下所示:

Private Sub Workbook_Open()

        Worksheets("Sheet1").Columns.AutoFit

End Sub
只需确保代码位于
此工作簿的
代码模块中。

在excel中选择所有工作表(左上角),然后双击b列和c列之间的行。 在VB中:


自动调整任何电子表格中所有列的快捷键

Ctrl+A(全选)


Alt+H+O+I(自动调整列宽)

计算出来,下面是供将来参考的源代码。 感谢@Soulfire为我们指明了正确的方向

首先,我甚至没有使用
Interop
,因为需求刚刚声明我需要将其保存到Excel

我联系了Stimulsoft,他们指了指我

因为在创建文件之前不能使用donne,所以我添加了要求用户打开文件的功能

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地狱等的用户上)

我们founs是一个很好的选择。 仅替换以下3行:

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

                                var customEvent = new Excel.Application_WorkbookOpenEventHandler(CustomWorkbookOpenEvent);
                                excelApp.WorkbookOpenEvent += customEvent;
using Excel = NetOffice.ExcelApi;
/* ... */

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