如何隐藏Excel中的行?

我有这个代码来隐藏某些行:

private static readonly Double DISPLAYED_HIDDEN_CUTOFF_VAL = 0.01; private bool _hide; . . . _hide = racda.TotalItemPercentageOfItem < DISPLAYED_HIDDEN_CUTOFF_VAL; if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_curDescriptionTopRow, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } 

代码到达时应该是,但它没有效果:这些行仍然可见。 我希望他们在电子表格上,但默认情况下不可见。

我怎么能做到这一点?

UPDATE

这也没有工作:

 hiddenRange.Rows.Hidden = true; 

实际上,这导致应用程序崩溃:

 hiddenRange.Hidden = true; 

更新2

即使这些试图完成它的偷偷摸摸的方法也没有做任何事情:

 //hiddenRange.RowHeight = 0; <= did nothing hiddenRange.Rows.RowHeight = 0; // <= also does nothing 

更新3

是的,你说得对,MacroMarc(回复下面的评论); 这个testing代码确实工作:

 var testRange = _xlSheet.Range[_xlSheet.Cells[2, 1], _xlSheet.Cells[2, 4]]; testRange.EntireRow.Hidden = true; 

…所以在我的代码中,有一些事情在我的脑海里混乱了。 也许这是一个时间问题; 我会再次用一把精细的梳子去复习。

Dicho discombobulatory代码是:

  foreach (RawAndCalcdDataAmalgamated racda in _rawAndCalcdDataAmalgamatedList) { _hide = racda.TotalItemPercentageOfItem < DISPLAYED_HIDDEN_CUTOFF_VAL; AddDescription(racda.ItemDescription); AddDataLabels(); AddMonthData(racda.PackagesMonth1, racda.PurchasesMonth1, racda.AvgPriceMonth1, racda.PercentOfTotalMonth1, MONTH1_COL); AddMonthData(racda.PackagesMonth2, racda.PurchasesMonth2, racda.AvgPriceMonth2, racda.PercentOfTotalMonth2, MONTH2_COL); AddMonthData(racda.PackagesMonth3, racda.PurchasesMonth3, racda.AvgPriceMonth3, racda.PercentOfTotalMonth3, MONTH3_COL); AddMonthData(racda.PackagesMonth4, racda.PurchasesMonth4, racda.AvgPriceMonth4, racda.PercentOfTotalMonth4, MONTH4_COL); AddMonthData(racda.PackagesMonth5, racda.PurchasesMonth5, racda.AvgPriceMonth5, racda.PercentOfTotalMonth5, MONTH5_COL); AddMonthData(racda.PackagesMonth6, racda.PurchasesMonth6, racda.AvgPriceMonth6, racda.PercentOfTotalMonth6, MONTH6_COL); AddMonthData(racda.PackagesMonth7, racda.PurchasesMonth7, racda.AvgPriceMonth7, racda.PercentOfTotalMonth7, MONTH7_COL); AddMonthData(racda.PackagesMonth8, racda.PurchasesMonth8, racda.AvgPriceMonth8, racda.PercentOfTotalMonth8, MONTH8_COL); AddMonthData(racda.PackagesMonth9, racda.PurchasesMonth9, racda.AvgPriceMonth9, racda.PercentOfTotalMonth9, MONTH9_COL); AddMonthData(racda.PackagesMonth10, racda.PurchasesMonth10, racda.AvgPriceMonth10, racda.PercentOfTotalMonth10, MONTH10_COL); AddMonthData(racda.PackagesMonth11, racda.PurchasesMonth11, racda.AvgPriceMonth11, racda.PercentOfTotalMonth11, MONTH11_COL); AddMonthData(racda.PackagesMonth12, racda.PurchasesMonth12, racda.AvgPriceMonth12, racda.PercentOfTotalMonth12, MONTH12_COL); AddMonthData(racda.PackagesMonth13, racda.PurchasesMonth13, racda.AvgPriceMonth13, racda.PercentOfTotalMonth13, MONTH13_COL); AddTotalsColData(racda.TotalItemPackages, racda.TotalItemPurchases, racda.TotalItemAvgPrice, racda.TotalItemPercentageOfItem); if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_curDescriptionTopRow, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } _lastRowAdded = _curDescriptionTopRow + 3; AddBottomBorder(_lastRowAdded); _curDescriptionTopRow = _curDescriptionTopRow + 4; } 

…或者,无关的细节:

  foreach (RawAndCalcdDataAmalgamated racda in _rawAndCalcdDataAmalgamatedList) { _hide = racda.TotalItemPercentageOfItem < DISPLAYED_HIDDEN_CUTOFF_VAL; AddMonthData(racda.PackagesMonth1, racda.PurchasesMonth1, racda.AvgPriceMonth1, racda.PercentOfTotalMonth1, MONTH1_COL); . . . if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_curDescriptionTopRow, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } _lastRowAdded = _curDescriptionTopRow + 3; _curDescriptionTopRow = _curDescriptionTopRow + 4; } 

更新4

现在正在工作; 我不得不将行范围从一个更改为多个:

 if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_lastRowAdded, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } 

…也许它以前是以编码的方式工作,我只是没有注意到,因为我编码的内容(隐藏在阈值以下的每四个中只有一行)并不是我想要的(将所有四行都隐藏在阈值以下)。

现在问题是他们(某些行)是隐藏的,但我没有看到用户如何使这些行可见(这是传统的手工电子表格如何工作)。

我发现如何做到这一点(手动取消隐藏) 在这里 。 我自己并不需要这么做,我只需要知道用户可以做到这一点。

如果您不介意使用其他库,那么在使用Excel和免费使用时,ClosedXML是非常棒的。

https://closedxml.codeplex.com/

以下是如何隐藏工作表中的行的示例:

  var wb = new XLWorkbook(); var ws = wb.Worksheets.Add("Hide Unhide"); ws.Columns(1, 3).Hide(); ws.Rows(1, 3).Hide(); ws.Column(2).Unhide(); ws.Row(2).Unhide(); wb.SaveAs("HideUnhide.xlsx"); 

来源: https : //closedxml.codeplex.com/wikipage ?title=Hide%20Unhide%20Row%28s%29%2fColumn%28s%29&referringTitle=Documentation

强烈推荐它,它为几个函数提供了很多有用的和很好的命名约定。 希望有一些帮助!

我首先以一种特定的方式来解决这个问题:

 private static readonly Double DISPLAYED_HIDDEN_CUTOFF_VAL = 0.01; private bool _hide; private Worksheet _xlSheet; . . . _hide = racda.TotalItemPercentageOfItem < DISPLAYED_HIDDEN_CUTOFF_VAL; . . . if (_hide) { var hiddenRange = _xlSheet.Range[_xlSheet.Cells[_curDescriptionTopRow, ITEMDESC_COL], _xlSheet.Cells[_lastRowAdded, TOTALS_COL]]; hiddenRange.EntireRow.Hidden = true; } 

…现在以更一般/抽象的方式:

 if ([some condition where you want rows to be hidden]) { var hiddenRange = yourWorksheet.Range[yourWorksheet.Cells[firstRowToHide, firstColToHide], yourWorksheet.Cells[lastRowToHide, lastColToHide]]; hiddenRange.EntireRow.Hidden = true; }