Одна из вещей, которая очень важна во время использования OpenXML, это то, что вы проверяете код, который пишете, с помощью XML-документа Office Excel.Для этого я предлагаю вам установить 7Zip и распаковать файл .Xlsx, а затем проверить содержимое Xmls внутри извлеченной папки.
Примечание: офисный файл включал несколько файлов XML, которые упакованы в один файл .Xlsx.
Затем перейдите в Xl-> Worksheet-> Sheet1.xml
тогда вы можете увидеть такой XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="x14ac" xmlns:x14ac="http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac">
<dimension ref="A1:A4"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0">
<selection sqref="A1:A4"/>
</sheetView>
</sheetViews>
<sheetFormatPr defaultRowHeight="15" x14ac:dyDescent="0.25"/>
<sheetData>
<row r="1" spans="1:1" x14ac:dyDescent="0.25">
<c r="A1" s="1" t="s">
<v>0</v>
</c>
</row>
<row r="2" spans="1:1" x14ac:dyDescent="0.25">
<c r="A2" s="1"/>
</row>
<row r="3" spans="1:1" x14ac:dyDescent="0.25">
<c r="A3" s="1"/>
</row>
<row r="4" spans="1:1" x14ac:dyDescent="0.25">
<c r="A4" s="1"/>
</row>
</sheetData>
<mergeCells count="1">
<mergeCell ref="A1:A4"/>
</mergeCells>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
В этом файле Excel я объединил A1
в A4
, и вы можете увидеть это в <mergeCells count="1">
в конце XML,Кроме того, я написал Hello
внутри объединенных ячеек
Итак, я считаю, что для проверки объединенных ячеек вы должны как-то использовать.
внутри файла SharedString.xml
внутриВ извлеченной папке вы можете увидеть:
<sst xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" count="1" uniqueCount="1"><si><t>Hello</t></si></sst>
, чтобы вы могли видеть, что значение атрибута count
равно <mergeCells />
значению count
тега.
Этибыли введением, чтобы сказать вам, что OpenXml - это просто правильная библиотека, которая просто анализирует XML.
, если вы видите приведенный ниже код, который я написал, просто читая файлы XML и обращая внимание на имя переменной, которую выувидит, что я только что попытался просмотреть теги XML и нашел правильное значение.
using (SpreadsheetDocument document = SpreadsheetDocument.Open(@"D:\test.xlsx", true))
{
WorkbookPart wbPart = document.WorkbookPart;
List<WorksheetPart> wsParts = wbPart.WorksheetParts.ToList();
if (wsParts != null && wsParts.Any())
{
WorksheetPart SheetPart1 = wsParts.First();
MergeCells mergeCells = SheetPart1.Worksheet.Elements<MergeCells>().First();
foreach (MergeCell mergeCell in mergeCells)
{
string[] mergedRow = mergeCell.Reference.Value.Split(new string[]{":"},StringSplitOptions.None);
Cell theCell = SheetPart1.Worksheet.Descendants<Cell>().
Where(c => c.CellReference == mergedRow[0]).FirstOrDefault();
string value = GetCellValue(document, theCell);
}
}
}
adn затем:
public string GetCellValue(SpreadsheetDocument document, Cell cell)
{
SharedStringTablePart stringTablePart = document.WorkbookPart.SharedStringTablePart;
string value = string.Empty;
if (cell.CellValue != null)
{
value = cell.CellValue.InnerXml;
if (cell.DataType != null && cell.DataType.Value == CellValues.SharedString)
{
value = stringTablePart.SharedStringTable.ChildElements[Int32.Parse(value)].InnerText;
}
}
return value;
}