我正在將(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;