C# Stimulsoft:使Excel列自动变宽
我正在将(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
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;