我正在将(Stimulsoft)报告导出为excel,但某些单元格文本变长,并导致单元格之间的水平对齐失败。 很明显,文字包装可以放大细胞高度,但不会将其传播到同一行中的所有其他细胞。Stimulsoft:使Excel列自动宽度
我设法让它更可靠,在所有单元格中将CanGrow
设置为false,但这样用户需要在excel打开后自动适应列宽。
有什么办法可以让Excel自动调整所有列的宽度?
我正在将(Stimulsoft)报告导出为excel,但某些单元格文本变长,并导致单元格之间的水平对齐失败。 很明显,文字包装可以放大细胞高度,但不会将其传播到同一行中的所有其他细胞。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
代码模块中。
在excel中选择所有工作表(在左上方)并双击列b和c之间的连线。 在VB:
Cells.Select
Cells.EntireColumn.AutoFit
键盘快捷键来自动适应任何电子表格
按Ctrl + A(全选)
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地狱等)。
我们fonns NetOffice是一个很好的选择。 刚刚更换了下面3行:
using Excel = NetOffice.ExcelApi;
/* ... */
var customEvent = new Excel.Application_WorkbookOpenEventHandler(CustomWorkbookOpenEvent);
excelApp.WorkbookOpenEvent += customEvent;