![](/img/trans.png)
[英]With OpenXML how do I get the StyleIndex of an existing style in an excel spreadsheet
[英]How can I only get visible cells in an Excel spreadsheet using OpenXML?
我正在使用 C# 中的 OpenXML 從 Excel 電子表格中的單元格中提取數據。 如果單元格在電子表格上可見,我只想提取數據。 我可以使用以下代碼獲取所有單元格:
var cells = part.Worksheet.Descendants<Cell>;
然后我可以使用“CellReference.Value”屬性來確定單元格屬於哪一列。
下面的代碼將為我提供電子表格上的可見列。
var visible_columns = part.Worksheet.Descendants<Column>().Where(a => a.Hidden == null || a.Hidden.Value == false);
我現在被困在試圖以編程方式將單元格 object 與其列 object 關聯起來。 據我所知,object 列上沒有屬性來獲取它的名稱。 理想情況下,我會使用正則表達式從單元格 object 上的“CellReference.Value”屬性中獲取列名。 一旦有了它,我就可以使用它來獲取關聯的列 object,然后我可以使用它來檢查 Hidden 屬性。
我還查看了單元格 object 的“父”屬性,但這給了我一個行 object 並不能解決我的問題。 誰能指出我正確的方向?
謝謝
以下是讀取不在隱藏行或列內的單元格的方法:
static void Main()
{
using (var spreadsheetDocument = SpreadsheetDocument.Open("input.xlsx", false))
{
var workbookPart = spreadsheetDocument.WorkbookPart;
var worksheetPart = workbookPart.WorksheetParts.First();
var worksheet = worksheetPart.Worksheet;
var columns = worksheet.Elements<Columns>().First();
// Get names of the hidden columns.
var hiddenColumnNames = new HashSet<string>();
foreach (var column in columns.Elements<Column>().Where(c=> c.Hidden != null && c.Hidden.Value))
for (uint min = column.Min, max = column.Max; min <= max; min++)
hiddenColumnNames.Add(GetColumnName(min));
var sheetData = worksheet.Elements<SheetData>().First();
foreach (var row in sheetData.Elements<Row>())
{
// Skip cells that are in hidden row.
if (row.Hidden != null && row.Hidden.Value)
continue;
foreach (var cell in row.Elements<Cell>())
{
// Skip cell that is in hidden column.
var columnName = cell.CellReference.Value.Replace(row.RowIndex.ToString(), "");
if (hiddenColumnNames.Contains(columnName))
continue;
// TODO: read visible cell ...
}
}
}
}
static string GetColumnName(uint columnNumber)
{
string columnName = "";
while (columnNumber > 0)
{
uint modulo = (columnNumber - 1) % 26;
columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
columnNumber = (uint)((columnNumber - modulo) / 26);
}
return columnName;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.