В продолжение моего комментария, вот еще несколько подробных советов.Я пишу это на мобильный телефон, поэтому, пожалуйста, прости, что это не полный рабочий код
Щелкните правой кнопкой мыши узел решения в обозревателе решений и выберите «Управление пакетами Nuget для решения»
Установите epplus - itсоздает файлы Excel напрямую (на самом деле это просто XML-файлы внутри zip-файла с именем xlsx), не требуя взаимодействия с установленным Excel, что может быть проблемой на обратной стороне, и его лучше избегать
Считайте ваш XML-документ в набор данных:
DataSet da = new DataSet();
da.ReadXml(path to your file);
Поместите точку останова в строку readxml и запустите приложение.Перейдите через readxml, затем укажите ds
и щелкните по лупе, которая появляется во всплывающей подсказке
. Ознакомьтесь с тем, как XML-документ представлен в DataSet - узлы, имеющие дочерние узлы, как правило, представляются как отдельныетаблицы со связями, связывающими их вместе, так что вы можете в итоге получить xml вроде
xml
parentnode1
childnode1
parentnode2
childnode2
/xml
У вас будет две таблицы, называемые parentnode и childnode, и вы будете читать их в наборе циклов, например:
foreach(var ro in da.Tables["parentnode"].Rows)
//do stuff with parent rows
//iterate child rows
foreach(var cro in ro.GetChildRows()){
//do stuff with child rows
}
}
Не похоже, что ваш xml структурирован таким образом прямо сейчас, но это нелегко сказать
Итак, теперь у вас есть XML-документ в виде набора таблиц в DataSetи вы хотите их как лист Excel.Epplus может создать файл Excel из таблицы данных (DataSet - это набор таблиц данных) в несколько строк кода, см. Экспорт DataTable в Excel с EPPlus
Если ваш DataSet содержит только 1стол, то работа в значительной степени закончена.Если в нем несколько таблиц, я рекомендую вам создать новый DataTable, а затем зациклить DataSet, выбирая значения из различных ds.Tables ["имя таблицы здесь"] и заполняя свой DataTable
Таким образом, чтобы реализовать вашу программу, выполнитенабор комментариев в виде кода
//read xml file to DataSet - 2 lines of code
//EITHER xml is flat structure, results in one datatable in the set
//so just remove or rename columns as required - few lines
//OR DataSet has 3 tables, make a new datatable and loop over the 3,
//populating the new one, to flatten it - few lines
//use epplus to turn the single datatable to an excel sheet - 4 lines
Проблема решена, будем надеяться, примерно в 10 строках кода