C#生成的Excel表格中如何自动调整列宽

4

我正在尝试使用C#从SQL Server数据库导出数据,制作一个Excel表格,并自动调整列和行的大小。经过一些研究,我发现现有的解决方案似乎没有任何效果。

//This code produces the correct Excel File with the expected content
Excel.Application ExcelApp = new Excel.Application();
ExcelApp.Application.Workbooks.Add(Type.Missing);
for (int i = 1; i < myDataTable.Rows.Count + 2; i++)
{
   for (int j = 1; j < myDataTable.Columns.Count + 1; j++)
   {
      if (i == 1)
      {
         ExcelApp.Cells[i, j] = myColumnCollection[j - 1].ToString();
      }
      else
         ExcelApp.Cells[i, j] = myDataTable.Rows[i - 2][j - 1].ToString();
   }
}
ExcelApp.ActiveWorkbook.SaveCopyAs(Application.StartupPath + "\\test.xlsx");
ExcelApp.ActiveWorkbook.Saved = true;

//This code is where I tried to do the Autofit work
Excel.Worksheet ws = ExcelApp.ActiveWorkbook.Worksheets[1];
Excel.Range range = ws.UsedRange; 
//ws.Columns.ClearFormats();
//ws.Rows.ClearFormats();
//range.EntireColumn.AutoFit();
//range.EntireRow.AutoFit();
ws.Columns.AutoFit();
ws.Rows.AutoFit();

ExcelApp.Quit();

我已经尝试了几种方法,最后我认为我理解了Range.Columns.Autofit()Range.EntireColumn.AutoFit()之间的区别,并且在获取UsedRange之前和之后尝试使用Worksheet.Columns.ClearFormat()。据我所知,没有任何一种方法对我的文件产生任何影响。

我需要做些什么才能使列和行自动调整到其内容大小?


据我所知,这应该是可以正常工作的。 - psoshmo
我也尝试过使用 ws.Columns["A:G"].AutoFit();,但它也没有产生影响。 - SmarterThanYourAverageBear
你能调用 ws.AutoFit() 吗? - Derek
1
这可能是一个愚蠢的问题,但值得检查一下,Worksheets[1] 是正确的工作表吗?那里实际上没有两个工作表,你是否引用了错误的工作表?我只是随口说说。 - psoshmo
1
你在应用自适应调整后没有保存工作簿,难道不应该保存更改吗? - Derek
显示剩余5条评论
1个回答

2

感谢 Derek 指出了显而易见的事情。我需要在修改之后保存工作簿。我只需要将 Autofit() 的代码移动到保存代码之前。

 Excel.Worksheet ws = ExcelApp.ActiveWorkbook.Worksheets[1];
        ws.Columns.AutoFit();
        ws.Rows.AutoFit();
        ExcelApp.ActiveWorkbook.SaveCopyAs(Application.StartupPath + "\\HaulerInfo.xlsx");
        ExcelApp.ActiveWorkbook.Saved = true;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接