рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдореБрдЭреЗ рдХрд╛рд░реНрдпрд╛рд▓рдп рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ ( рдбреЙрдХ, xlsx, rtf , doc, xls, odt рдФрд░ ods ) рд╕реЗ рдкрд╛рда рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрдирд╛ рдкрдбрд╝рд╛ ред рдЯрд╛рд╕реНрдХ рдХреЛ рдЖрдЧреЗ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╕рдВрд░рдЪрдирд╛ рдХреЗ рд╕рд╛рде рдХрдЪрд░рд╛ рдХреЗ рдмрд┐рдирд╛ xml рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдХрд╛рд░реНрдп рдЬрдЯрд┐рд▓ рдерд╛ред
рдЗрдВрдЯрд░реЛрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рдХрдИ рддрд░рд╣ рд╕реЗ рдЕрддрд┐рд░реЗрдХ рдХреЗ рдХрд╛рд░рдг рддреБрд░рдВрдд рджреВрд░ рд╣реЛ рдЧрдпрд╛, рдФрд░ рд╕рд░реНрд╡рд░ рдкрд░ рдПрдордПрд╕ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рднреА рд╣реБрдИ ред рдирддреАрдЬрддрди, рдПрдХ рд╕рдорд╛рдзрд╛рди рдкрд╛рдпрд╛ рдЧрдпрд╛ рдФрд░ рдПрдХ рдЖрдВрддрд░рд┐рдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЦреЛрдЬ рдЗрддрдиреА рдЬрдЯрд┐рд▓ рдереА рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╕реБрд▓рдн рдореИрдиреБрдЕрд▓ рдХреА рдХрдореА рдХреЗ рдХрд╛рд░рдг рддреБрдЪреНрдЫ рдирд╣реАрдВ рдереА, рдЬреЛ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдЦрд╛рд▓реА рд╕рдордп рдореЗрдВ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдерд╛ рдЬреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛, рдФрд░ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░рд╣ рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рднреА рдмрдирд╛рдПрдЧрд╛ рддрд╛рдХрд┐ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдкрдврд╝реЗрдВ рд╡рд╣ рдХрдо рд╕реЗ рдХрдо рд╕рддрд╣реА рд░реВрдк рд╕реЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереАред
рдкрд╛рдпрд╛ рд╕рдорд╛рдзрд╛рди рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдЕрдкрдиреЗ рдЖрдк рдХреЛ рдХреБрдЫ рдирд┐рд╖реНрдХрд░реНрд╖реЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд░реЗрдВ рдЬреЛ рдореЗрд░реЗ рд╢реЛрдз рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХрд┐рдП рдЧрдП рдереЗ:
- .Net рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдП, рд╕рднреА рд╕реВрдЪреАрдмрджреНрдз рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рддреИрдпрд╛рд░ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рд╣реИ, рдЬреЛ рд╣рдореЗрдВ рдХреБрдЫ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╣рдорд╛рд░реЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░реЗрдЧрд╛ред
- рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ Microsoft OpenXML рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдкрд░ рдПрдХ рдЕрдЪреНрдЫрд╛ рдореИрдиреБрдЕрд▓ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рди рдХрд░реЗрдВ: рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдмрд╣реБрдд рд▓рд╛рд▓-рдЖрдВрдЦреЛрдВ рд╡рд╛рд▓рд╛, рд╕реНрдЯреИрдХрдСрд╡рд░рдлрд╝реНрд▓реЛ рдзреВрдореНрд░рдкрд╛рди рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдбреАрдмрдЧрд░ рдХреЗ рд╕рд╛рде рдЦреЗрд▓рдирд╛ рд╣реЛрдЧрд╛ред
- рд╣рд╛рдБ, рдореИрдВ рдЕрднреА рднреА рдбреНрд░реИрдЧрди рдХреЛ рд╡рд╢ рдореЗрдВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ред
рдореБрдЭреЗ рддреБрд░рдВрдд рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдХреНрд░рд┐рдп рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ (рдЬрд┐рддрдирд╛ рдЦрд╛рд▓реА рд╕рдордп рдХреА рдЕрдиреБрдорддрд┐ рд╣реИ)ред рдпрд╣ рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреЛрд╕реНрдЯ рд▓рд┐рдЦреА рдЬрд╛рдПрдВрдЧреА рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ, рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рдЧреАрдердм рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд╣рд╛рдВ рд╕реЗ рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред
Xlsx рдФрд░ docx рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ
.xlsx
, , , docx xlsx zip-, xml. , : zip . , : \xl\worksheets
.
excel , , - , :

, , , ( <f>
) ( <v>
). , shared
sharedStrings.xml, \xl
.
: .
, -, IConvertable:
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
namespace ConverterToXml.Converters
{
interface IConvertable
{
string Convert(Stream stream);
string ConvertByFile(String path);
}
}
, : string Convert(Stream stream)
( , - ), string ConvertByFile(String path)
.
XlsxToXml
, IConvertable
Nuget DocumentFormat.OpenXml ( , 2.10.0).
string SpreadsheetProcess(Stream memStream)
, string Convert(Stream stream)
.
public string Convert(Stream memStream)
{
return SpreadsheetProcess(memStream);
}
, *string SpreadsheetProcess(Stream memStream)*
:
string SpreadsheetProcess(Stream memStream)
{
using (SpreadsheetDocument doc = SpreadsheetDocument.Open(memStream, false))
{
memStream.Position = 0;
StringBuilder sb = new StringBuilder(1000);
sb.Append("<?xml version=\"1.0\"?><documents><document>");
SharedStringTable sharedStringTable = doc.WorkbookPart.SharedStringTablePart.SharedStringTable;
int sheetIndex = 0;
foreach (WorksheetPart worksheetPart in doc.WorkbookPart.WorksheetParts)
{
WorkSheetProcess(sb, sharedStringTable, worksheetPart, doc, sheetIndex);
sheetIndex++;
}
sb.Append(@"</document></documents>");
return sb.ToString();
}
}
, string SpreadsheetProcess(Stream memStream)
:
using
excel . xlsx DocumentFormat.OpenXml SpreadsheetDocument.
StringBuilder sb ( 1000 . StringBuilder , . , , .
shared ( ). , SpreadsheetDocument :
SharedStringTable sharedStringTable = doc.WorkbookPart.SharedStringTablePart.SharedStringTable
.
,
foreach (WorksheetPart worksheetPart in doc.WorkbookPart.WorksheetParts)
{
WorkSheetProcess(sb, sharedStringTable, worksheetPart, doc, sheetIndex);
sheetIndex++;
}
WorkSheetProcess(sb, sharedStringTable, worksheetPart, doc, sheetIndex);
:
private void WorkSheetProcess(StringBuilder sb, SharedStringTable sharedStringTable, WorksheetPart worksheetPart, SpreadsheetDocument doc,
int sheetIndex)
{
string sheetName = doc.WorkbookPart.Workbook.Descendants<Sheet>().ElementAt(sheetIndex).Name.ToString();
sb.Append($"<sheet name=\"{sheetName}\">");
foreach (SheetData sheetData in worksheetPart.Worksheet.Elements<SheetData>())
{
if (sheetData.HasChildren)
{
foreach (Row row in sheetData.Elements<Row>())
{
RowProcess(row, sb, sharedStringTable);
}
}
}
sb.Append($"</sheet>");
}
, :
string sheetName = doc.WorkbookPart.Workbook.Descendants<Sheet>().ElementAt(sheetIndex).Name.ToString();
, , . , . , , shift+F9( ), doc
( )->WorkbookPart->Workbook Descendants(), Sheet
. , ( ). :
foreach
, . sheetData
- , , RowProcess
:
foreach (SheetData sheetData in worksheetPart.Worksheet.Elements<SheetData>())
{
if (sheetData.HasChildren)
{
foreach (Row row in sheetData.Elements<Row>())
{
RowProcess(row, sb, sharedStringTable);
}
}
}
void RowProcess(Row row, StringBuilder sb, SharedStringTable sharedStringTable)
:
void RowProcess(Row row, StringBuilder sb, SharedStringTable sharedStringTable)
{
sb.Append("<row>");
foreach (Cell cell in row.Elements<Cell>())
{
string cellValue = string.Empty;
sb.Append("<cell>");
if (cell.CellFormula != null)
{
cellValue = cell.CellValue.InnerText;
sb.Append(cellValue);
sb.Append("</cell>");
continue;
}
cellValue = cell.InnerText;
if (cell.DataType != null && cell.DataType == CellValues.SharedString)
{
sb.Append(sharedStringTable.ElementAt(Int32.Parse(cellValue)).InnerText);
}
else
{
sb.Append(cellValue);
}
sb.Append("</cell>");
}
sb.Append("</row>");
}
foreach (Cell cell in row.Elements<Cell>())
:
if (cell.CellFormula != null)
{
cellValue = cell.CellValue.InnerText;
sb.Append(cellValue);
sb.Append("</cell>");
continue;
}
, , (cellValue = cell.CellValue.InnerText;
) .
, , shared: , :
if (cell.DataType != null && cell.DataType == CellValues.SharedString)
{
sb.Append(sharedStringTable.ElementAt(Int32.Parse(cellValue)).InnerText);
}
, .
.docx
, word excel-.
, , , , , , . , , .., , , , - , , .
, . zip . . word document. , , , , . , : - .
, w:t, w:r, w:p. , docx, . : , w:numPr, (w:ilvl) id , (w:numId).

, , , , ( , ), , id , , .
, , :

, . w:tr () w:tc().

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рдЖрдк рдХреЛрдбрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░реЗрдВ, рдореИрдВ рдПрдХ рдмрд╣реБрдд рд╣реА рдорд╣рддреНрд╡рдкреВрд░реНрдг рдмрд╛рд░реАрдХрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рд╣рд╛рдБ, рдЬреИрд╕рд╛ рдХрд┐ рдкреЗрдЯрдХрд╛ рдФрд░ рд╡рд╛рд╕рд┐рд▓реА рдЗрд╡рд╛рдиреЛрд╡рд┐рдЪ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдордЬрд╛рдХ рдореЗрдВ)ред рдЬрдм рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕реВрдЪреА, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЬрдм рдпрд╣ рдиреЗрд╕реНрдЯреЗрдб рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рддреЛ рдПрдХ рд╕реНрдерд┐рддрд┐ рдЙрддреНрдкрдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рд╕реВрдЪреА рдЖрдЗрдЯрдо рдХреЛ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд╛рда, рдЫрд╡рд┐, рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рдЪреАрдЬ рдХреЗ рд╕рдореНрдорд┐рд▓рди рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕реВрдЪреА рдХрд╛ рд╕рдорд╛рдкрди рдЯреИрдЧ рдХрдм рд▓рдЧрд╛рддреЗ рд╣реИрдВ? рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡, рдмреИрд╕рд╛рдЦреА рдФрд░ рд╕рд╛рдЗрдХрд┐рд▓ рднрд╡рди рдХреА рдорд╣рдХ, рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЖрддрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдХреБрдВрдЬреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреА рдЖрдИрдбреА рд╣реЛрдЧреА, рдФрд░ рдореВрд▓реНрдп рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреА рдЖрдИрдбреА рдХреЗ рдЕрдиреБрд░реВрдк рд╣реЛрдЧрд╛ (рд╣рд╛рдБ, рдпрд╣ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХреА рдЕрдкрдиреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЖрдИрдбреА рд╣реИ), рдЬреЛ рдПрдХ рд╕реВрдЪреА рдореЗрдВ рдЕрдВрддрд┐рдо рднреА рд╣реИред рд╢рд╛рдпрдж рдпрд╣ рдХрд╛рдлреА рдХрдард┐рди рд▓рд┐рдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХреБрдЫ рд╣рдж рддрдХ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛:public string Convert(Stream memStream)
{
Dictionary<int, string> listEl = new Dictionary<int, string>();
string xml = string.Empty;
memStream.Position = 0;
using (WordprocessingDocument doc = WordprocessingDocument.Open(memStream, false))
{
StringBuilder sb = new StringBuilder(1000);
sb.Append("<?xml version=\"1.0\"?><documents><document>");
Body docBody = doc.MainDocumentPart.Document.Body;
CreateDictList(listEl, docBody);
foreach (var element in docBody.ChildElements)
{
string type = element.GetType().ToString();
try
{
switch (type)
{
case "DocumentFormat.OpenXml.Wordprocessing.Paragraph":
if (element.GetFirstChild<ParagraphProperties>() != null)
{
if (element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val != CurrentListID)
{
CurrentListID = element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val;
sb.Append($"<li id=\"{CurrentListID}\">");
InList = true;
ListParagraph(sb, (Paragraph)element);
}
else
{
ListParagraph(sb, (Paragraph)element);
}
if (listEl.ContainsValue(((Paragraph)element).ParagraphId.Value))
{
sb.Append($"</li id=\"{element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val}\">");
}
continue;
}
else
{
SimpleParagraph(sb, (Paragraph)element);
continue;
}
case "DocumentFormat.OpenXml.Wordprocessing.Table":
Table(sb, (Table)element);
continue;
}
}
catch (Exception e)
{
continue;
}
}
sb.Append(@"</document></documents>");
xml = sb.ToString();
}
return xml;
}
Dictionary<int, string> listEl = new Dictionary<int, string>();
тАФ .
using (WordprocessingDocument doc = WordprocessingDocument.Open(memStream, false))
тАФ doc
WordprocessingDocument, word, ( , OpenXML) .
StringBuilder sb = new StringBuilder(1000);
тАФ xml.
Body docBody = doc.MainDocumentPart.Document.Body;
тАФ ,
CreateDictList(listEl, docBody);
, foreach , :
void CreateDictList(Dictionary<int, string> listEl, Body docBody)
{
foreach(var el in docBody.ChildElements)
{
if(el.GetFirstChild<ParagraphProperties>() != null)
{
int key = el.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val;
listEl[key] = ((DocumentFormat.OpenXml.Wordprocessing.Paragraph)el).ParagraphId.Value;
}
}
}
GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val;
тАФ ( https://docs.microsoft.com/ru-ru/office/open-xml/open-xml-sdk ), . , , , )
, , foreach . : . , , . , (, ) , . , . :
string type = element.GetType().ToString();
try
{
switch (type)
{
case "DocumentFormat.OpenXml.Wordprocessing.Paragraph":
if (element.GetFirstChild<ParagraphProperties>() != null)
{
if (element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val != CurrentListID)
{
CurrentListID = element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val;
sb.Append($"<li id=\"{CurrentListID}\">");
InList = true;
ListParagraph(sb, (Paragraph)element);
}
else
{
ListParagraph(sb, (Paragraph)element);
}
if (listEl.ContainsValue(((Paragraph)element).ParagraphId.Value))
{
sb.Append($"</li id=\"{element.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val}\">");
}
continue;
}
else
{
SimpleParagraph(sb, (Paragraph)element);
continue;
}
case "DocumentFormat.OpenXml.Wordprocessing.Table":
Table(sb, (Table)element);
continue;
}
}
try-catch
, - , switch-case
( , , ). , - , .
, ListParagraph(sb, (Paragraph)element);
:
void ListParagraph(StringBuilder sb, Paragraph p)
{
var level = p.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingLevelReference>().Val;
var id = p.GetFirstChild<ParagraphProperties>().GetFirstChild<NumberingProperties>().GetFirstChild<NumberingId>().Val;
sb.Append($"<ul id=\"{id}\" level=\"{level}\"><p>{p.InnerText}</p></ul id=\"{id}\" level=\"{level}\">");
}
<ul>
, id .
, , SimpleParagraph(sb, (Paragraph)element);
:
void SimpleParagraph(StringBuilder sb, Paragraph p)
{
sb.Append($"<p>{p.InnerText}</p>");
}
, <p>
рддрд╛рд▓рд┐рдХрд╛ рд╡рд┐рдзрд┐ рдореЗрдВ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддреА рд╣реИ Table(sb, (Table)element);
:
void Table(StringBuilder sb, Table table)
{
sb.Append("<table>");
foreach (var row in table.Elements<TableRow>())
{
sb.Append("<row>");
foreach (var cell in row.Elements<TableCell>())
{
sb.Append($"<cell>{cell.InnerText}</cell>");
}
sb.Append("</row>");
}
sb.Append("</table>");}
рдРрд╕реЗ рддрддреНрд╡ рдХрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реИ: рд╣рдо рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдХреЛрд╢рд┐рдХрд╛рдУрдВ рдореЗрдВ рддреЛрдбрд╝рддреЗ рд╣реИрдВ, рдХреЛрд╢рд┐рдХрд╛рдУрдВ рд╕реЗ рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ, рдЙрдиреНрд╣реЗрдВ рдЯреИрдЧ рдореЗрдВ рд▓рдкреЗрдЯрддреЗ рд╣реИрдВ <cell>
, рдЬрд┐рд╕реЗ рд╣рдо рдЯреИрдЧ рдореЗрдВ рдкреИрдХ рдХрд░рддреЗ рд╣реИрдВ <row>
рдФрд░ рдпрд╣ рд╕рдм рдЕрдВрджрд░ рдбрд╛рд▓рддреЗ рд╣реИрдВ <table>
ред
рдЗрд╕ рдкрд░, рдореИрдВ рдХрд╛рд░реНрдп рдХреЛ рдбреЙрдХреНрд╕ рдФрд░ xlsx рдкреНрд░рд╛рд░реВрдк рдХреЗ рджрд╕реНрддрд╛рд╡реЗрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рд╣рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реВрдВред
рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рд▓рд┐рдВрдХ рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
Rtf рд░реВрдкрд╛рдВрддрд░рдг рд▓реЗрдЦ