Stimulsoft:使 Excel 列自动宽度

Stimulsoft: Make Excel column auto width

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

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

有什么方法可以让 Excel 自动适应所有列的宽度?

有,而且比较简单

Private Sub AutoFitCols()

        Worksheets("Sheet1").Columns.AutoFit

End Sub

只需将 Sheet1 替换为您希望列自动适应的工作表的名称。

如果您希望在打开工作簿时自动发生这种情况,您可以将代码放在 Workbook_Open 事件中,如下所示:

Private Sub Workbook_Open()

        Worksheets("Sheet1").Columns.AutoFit

End Sub

只需确保代码在 ThisWorkbook 代码模块中。

In excel select all sheet(在左上角)并双击 b 列和 c 列之间的线。 在 VB:

Cells.Select
    Cells.EntireColumn.AutoFit

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

Ctrl+A(Select全部)

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

已完成,下面是源代码以供日后参考。 感谢@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 地狱等)。

我们发现 NetOffice 是一个不错的选择。 刚刚替换了下面的 3 行:

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

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