加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何使用OpenXML C#在Excel中隐藏工作表?

发布时间:2020-12-15 08:42:31 所属栏目:百科 来源:网络整理
导读:我有一个带有各种工作表的Excel模板,我将使用Open XML,C#转储从SQL Server检索的数据. 在完成转储数据后,我需要根据条件隐藏一些工作表.我找不到使用C#OpenXML隐藏特定表单的任何代码. 我尝试了以下但是床单没有被隐藏. byte[] byteArray = File.ReadAllByte
我有一个带有各种工作表的Excel模板,我将使用Open XML,C#转储从SQL Server检索的数据.
在完成转储数据后,我需要根据条件隐藏一些工作表.我找不到使用C#OpenXML隐藏特定表单的任何代码.

我尝试了以下但是床单没有被隐藏.

byte[] byteArray = File.ReadAllBytes("D:rptTemplate.xlsx");
using (MemoryStream mem = new MemoryStream())
{
mem.Write(byteArray,(int)byteArray.Length);
using (SpreadsheetDocument rptTemplate = SpreadsheetDocument.Open(mem,true))
{
    foreach (OpenXmlElement oxe in (rptTemplate.WorkbookPart.Workbook.Sheets).ChildElements)
    {
     if(((DocumentFormat.OpenXml.Spreadsheet.Sheet)(oxe)).Name == "ABC")
        ((DocumentFormat.OpenXml.Spreadsheet.Sheet)(oxe)).State = SheetStateValues.Hidden;
    }
    rptTemplate.WorkbookPart.Workbook.Save();
}
}

请求帮助.

谢谢.

解决方法

您必须设置WorkbookView类的ActiveTab属性
到索引不同于您的工作表的索引
我想躲起来.

因此,例如,如果您想要隐藏第一个工作表(索引为0的工作表)
在excel文件中,然后将ActiveTab属性设置为下一个可见工作表索引.

这是一个小代码示例(基于您提供的代码):

static void Main(string[] args)
{
  byte[] byteArray = File.ReadAllBytes("D:rptTemplate.xlsx");

  using (MemoryStream mem = new MemoryStream())
  {
    mem.Write(byteArray,(int)byteArray.Length);

    using (SpreadsheetDocument rptTemplate = SpreadsheetDocument.Open(mem,true))
    {
      foreach (OpenXmlElement oxe in (rptTemplate.WorkbookPart.Workbook.Sheets).ChildElements)
      {
        if(((DocumentFormat.OpenXml.Spreadsheet.Sheet)(oxe)).Name == "ABC")
        {
          ((DocumentFormat.OpenXml.Spreadsheet.Sheet)(oxe)).State = SheetStateValues.Hidden;

           WorkbookView wv = rptTemplate.WorkbookPart.Workbook.BookViews.ChildElements.First<WorkbookView>();

           if (wv != null)
           {
             wv.ActiveTab = GetIndexOfFirstVisibleSheet(rptTemplate.WorkbookPart.Workbook.Sheets);
           }                       
         }
      }
      rptTemplate.WorkbookPart.Workbook.Save();
    }
  }
}

private static uint GetIndexOfFirstVisibleSheet(Sheets sheets)
{
  uint index = 0;
  foreach (Sheet currentSheet in sheets.Descendants<Sheet>())
  {
    if (currentSheet.State == null || currentSheet.State.Value == SheetStateValues.Visible)
    {
      return index;
    }
    index++;
  }
  throw new Exception("No visible sheet found.");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读