【背景】
之前已经可以实现了,在C#中,操作Excel文件,实现整个excel文件内的所有的内容, 即所有的列,都实现自动适应列宽:
【已解决】C#中操作刚导出的Excel,设置其为自动调整列宽
但是此处,对于这样的excel:
即包含多行,且:
如果全部的列,都适应列宽,那么整个excel就太宽了,不方便查看内容,要水平滚动条,拖动来拖动去的;
如果全部都不去适应列宽的话,对于每行的内容,又看得不是很清楚;
所以希望:
只调整第一列,即title那列,只让第一列自动适应列宽,这样就实现了:
即方便查看excel中的每行的内容,又不至于excel页面弄得太宽
即希望弄成这样的:
【折腾过程】
1.之前的,全部都自动适应列宽的代码是:
//(2) auto adjust column width (according to content) if (isAutoFit) { Range allColumn = xlWorkSheet.Columns; allColumn.AutoFit(); }
2.看起来,貌似可以直接通过:
只选中第一列,然后再执行AutoFit,或许就可以了。
去试试:
bool isAutoFitForFistColumn = true; if (isAutoFitForFistColumn) { Range firstColumn = (Range)xlWorkSheet.Columns[0]; firstColumn.AutoFit(); }
结果是,对于
Range firstColumn = (Range)xlWorkSheet.Columns[0];
会直接挂掉,是不能正常执行此句代码的。
3.问题转化为了:
C#中如何选中Excel的某列
参考:
如何在 C# 中获得 Excel 工作表的一列
http://bbs.csdn.net/topics/50481843
去试试:
Range firstColumn = xlWorkSheet.get_Range("A1"); //Range firstColumn = (Range)xlWorkSheet.Columns[0]; firstColumn.AutoFit();
结果代码:
firstColumn.AutoFit();
也还是会挂掉。
4.后来参考:
去试试:
Range firstColumn = xlWorkSheet.get_Range("A1"); //Range firstColumn = (Range)xlWorkSheet.Columns[0]; firstColumn.EntireColumn.AutoFit();
结果就可以正常执行了,看,可以自动适应列宽了。
效果是:
【总结】
列宽自适应,是直接用AutoFit即可。
所以想要某列的列宽自适应的话,则需要:
先得到整个列,才可以执行AutoFit。
对应的代码是:
Range firstColumn = xlWorkSheet.get_Range("A1"); firstColumn.EntireColumn.AutoFit();
其中,A1,表示第一列。