如何在 C# 中使用 OpenXML 隐藏 Excel 中的行?
How to hide rows in Excel using OpenXML in C#?
如果我们可以在 C# 中使用 OpenXML Excel 隐藏空白行,我尝试了很多寻找解决方案。如果谁有解决办法,分享一下对大家有很大帮助。
我有一个摘要页面,其中包含 "A1:B7" 单元格中的数据。
我想隐藏从第 8 行到最后 1048576 行。
我正在尝试:
WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
SheetData sheetData = new SheetData();
Row emptyRow = new Row();
emptyRow.Hidden = true;
sheetData.Append(emptyRow);
worksheetPart.Worksheet.Append(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet();
sheets.Append(sheet);
worksheetPart.Worksheet.Save();
预期结果:应隐藏从 8 到 1048576 的所有行。
如果您还没有 OpenXMLSDKTool,请下载它,将未隐藏行的文件与隐藏行的文件进行比较,我相信它应该向您展示 xml 以及用于生成它的 c#。
您可以创建具有 8 到 1048576 RowIndex
个值的隐藏 Row
对象,并将它们添加到 sheetData
。但是,这会导致 Excel 文件相当大。
更好的优化方法是在 sheet 的格式设置属性中定义行默认隐藏,并且仅在指定时可见。
比如像下面这样:
using (var spreadsheetDocument = SpreadsheetDocument.Create(filePath,
SpreadsheetDocumentType.Workbook))
{
var workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
workbookpart.Workbook
.AppendChild(new Sheets())
.AppendChild(new Sheet()
{
Id = workbookpart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Sheet 1",
});
var sheetFormatProperties = new SheetFormatProperties()
{
DefaultRowHeight = 15,
ZeroHeight = true
};
var sheetData = new SheetData();
worksheetPart.Worksheet.Append(sheetFormatProperties, sheetData);
// Add first 8th visible rows, the rest will be hidden.
for (uint i = 1; i < 8; i++)
{
var row = new Row() { RowIndex = i };
sheetData.Append(row);
// Add cells to row ...
}
}
如果我们可以在 C# 中使用 OpenXML Excel 隐藏空白行,我尝试了很多寻找解决方案。如果谁有解决办法,分享一下对大家有很大帮助。
我有一个摘要页面,其中包含 "A1:B7" 单元格中的数据。 我想隐藏从第 8 行到最后 1048576 行。 我正在尝试:
WorkbookPart workbookPart = spreadsheetDocument.AddWorkbookPart();
workbookPart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
SheetData sheetData = new SheetData();
Row emptyRow = new Row();
emptyRow.Hidden = true;
sheetData.Append(emptyRow);
worksheetPart.Worksheet.Append(sheetData);
Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
Sheet sheet = new Sheet();
sheets.Append(sheet);
worksheetPart.Worksheet.Save();
预期结果:应隐藏从 8 到 1048576 的所有行。
如果您还没有 OpenXMLSDKTool,请下载它,将未隐藏行的文件与隐藏行的文件进行比较,我相信它应该向您展示 xml 以及用于生成它的 c#。
您可以创建具有 8 到 1048576 RowIndex
个值的隐藏 Row
对象,并将它们添加到 sheetData
。但是,这会导致 Excel 文件相当大。
更好的优化方法是在 sheet 的格式设置属性中定义行默认隐藏,并且仅在指定时可见。
比如像下面这样:
using (var spreadsheetDocument = SpreadsheetDocument.Create(filePath,
SpreadsheetDocumentType.Workbook))
{
var workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
var worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet();
workbookpart.Workbook
.AppendChild(new Sheets())
.AppendChild(new Sheet()
{
Id = workbookpart.GetIdOfPart(worksheetPart),
SheetId = 1,
Name = "Sheet 1",
});
var sheetFormatProperties = new SheetFormatProperties()
{
DefaultRowHeight = 15,
ZeroHeight = true
};
var sheetData = new SheetData();
worksheetPart.Worksheet.Append(sheetFormatProperties, sheetData);
// Add first 8th visible rows, the rest will be hidden.
for (uint i = 1; i < 8; i++)
{
var row = new Row() { RowIndex = i };
sheetData.Append(row);
// Add cells to row ...
}
}