我需要完全隐藏excel列。我使用下面的代码但没有用:
public void Hide (params string[] columns)
{
foreach(var column in columns)
{
Range range = (Range) oSheet.Columns[column, Type.Missing];
range.EntireColumn.Hidden = true;
}
}
我错过了什么?
答案 0 :(得分:4)
事实证明隐藏你指定的行和列的范围可能不容易。这是你如何做到这一点,只需两个简单的步骤:
1)为您的工作表命名:
private Worksheet _xlSheet;
2)现在,命名一个范围,包括要隐藏的第一行和一列,然后隐藏最后一行和一列,如下所示:
var hiddenRange = yourWorksheet.Range[_xlSheet.Cells[42, 1], _xlSheet.Cells[999, 13]];
hiddenRange.EntireRow.Hidden = true;
这假定您要隐藏的第一行是42,等等。显然,您将要更改这些硬编码值。
作为一个例子,这里是一些实际的代码,使用常量和变量而不是硬编码的val,它响应一个布尔值,它的值指示是否应该隐藏范围:
private bool _hide;
private int _curTopRow;
private static readonly int ITEMDESC_COL = 1;
private static readonly int TOTALS_COL = 16;
. . .
if (_hide)
{
var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curTopRow, ITEMDESC_COL], _xlSheet.Cells[_curTopRow+3, TOTALS_COL]];
hiddenRange.EntireRow.Hidden = true;
}
请注意,您需要引用Microsoft.Office.Interop.Excel程序集。
答案 1 :(得分:3)
上面的代码片段正在运行..对不起伙计们!问题是,我的同事过去常常在保存文件之前自动调整所有列,这将覆盖我上面的设置。是的,一个名为CloseFile()
的函数可以执行两个作业,格式化然后保存......许多职责,是吗?