Usarsef Ответов: 1

Как экспортировать xdocument в XML файл C#


Привет, у меня есть приложение, где я импортирую файл excel, а затем конвертирую его в XML-файл
Теперь процесс импорта работает очень хорошо, но мне нужно создать кнопку, чтобы сделать этот процесс ниже

Кнопка экспорта Нажмите кнопку &ГТ;&ГТ; показывает диалоговое окно безопасного &ГТ;&ГТ; выбор пути &ГТ;> введите имя файла и ГТ; > Сохранить как XML

Что я уже пробовал:

 private void IMPORT_Click(object sender, EventArgs e)
       {
           {
               //Fill datagridview  from excel file

               Microsoft.Office.Interop.Excel.Application xlApp;
               Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
               Microsoft.Office.Interop.Excel.Worksheet xlWorlSheet;
               Microsoft.Office.Interop.Excel.Range xlRange;
               int xlRow;
               string strfileName;
               openFileDialog1.Filter = "Excel Office | *.xls; *.xlsx";
               openFileDialog1.ShowDialog();
               strfileName = openFileDialog1.FileName;
               if (strfileName != string.Empty)
               {
                   xlApp = new Microsoft.Office.Interop.Excel.Application();
                   xlWorkBook = xlApp.Workbooks.Open(strfileName);
                   xlWorlSheet = xlWorkBook.Worksheets["sheet1"];
                   xlRange = xlWorlSheet.UsedRange;
                   const string FILENAME = @"c:\temp\xml file.xml";
                   System.Data.DataTable dt = new System.Data.DataTable();
                   dt.Columns.Add("CLM1", typeof(string));
                   dt.Columns.Add("CLM2", typeof(string));
                   dt.Columns.Add("CLM3", typeof(string));
                   dt.Columns.Add("CLM4", typeof(string));
                   dt.Columns.Add("CLM5", typeof(string));
                   dt.Columns.Add("CLM6", typeof(string));
                   dt.Columns.Add("CLM7", typeof(string));
                   dt.Columns.Add("CLM8", typeof(string));
                   dt.Columns.Add("CLM9", typeof(string));
                   dt.Columns.Add("CLM10", typeof(string));
                   dt.Columns.Add("CLM11", typeof(string));
                   dt.Columns.Add("CLM12", typeof(DateTime));
                   dt.Columns.Add("CLM13", typeof(DateTime));
                       for (xlRow = 2; xlRow <= xlRange.Rows.Count; xlRow++)
                   {
                           if (xlRange.Cells[xlRow, 2].Text != "")
                       {
                           dt.Rows.Add(new object[] {
                       xlRange.Cells[xlRow, 1].Text,xlRange.Cells[xlRow, 2].Text, xlRange.Cells[xlRow, 3].Text, xlRange.Cells[xlRow, 4].Text,
                       xlRange.Cells[xlRow, 5].Text, xlRange.Cells[xlRow, 6].Text,xlRange.Cells[xlRow, 7].Text, xlRange.Cells[xlRow, 8].Text,
                       xlRange.Cells[xlRow, 9].Text, xlRange.Cells[xlRow, 10].Text,xlRange.Cells[xlRow, 11].Text, xlRange.Cells[xlRow, 12].Text,
                       xlRange.Cells[xlRow, 13].Text});
                       }
                   }

                   // XML PARSING USING XDocument

                   dataGridView1.DataSource = dt;
                   var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US"));
                   XDocument doc = new XDocument(
                   new XDeclaration("1.0", "ISO-8859-1", null),
                   new XElement("Root",
                   new XElement("textBox", textBox.Text),
                   new XElement("comboBox1", combo1.Text),
                   new XElement("comboBox2", combo2.Text),
                   new XElement("comboBox3", combo3.ValueMember),
                   new XElement("Table",
                   dt.AsEnumerable().Select(row => new XElement("rd", new object[]{
                   new XElement("idd",row[0]),
                   new XElement("num",row[1]),
                   new XElement("des",row[2]),
                   new XElement("mht",row[3]),
                   new XElement("vat",row[4]),
                   new XElement("ctt",row[5]),
                   new XElement("refF",new object[] {
                   new XElement("if",row[6]),
                   new XElement("onm",row[7]),
                   new XElement("iccc",row[8]),}),
                   new XElement("tx",row[9]),
                   new XElement("mp",new XElement("id", row[10])),
                   new XElement("dpai",row.Field<DateTime>("CLM12").ToString("yyyy-MM-dd")),
                   new XElement("dcac",row.Field<DateTime>("CLM13").ToString("yyyy-MM-dd"))
                   })))));

                   doc.Save(FILENAME);

                   // Cleanup
                   xlWorkBook.Close(false);
                   xlApp.Quit();
                   // Manual disposal because of COM
                   while (System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp) != 0) { }
                   while (System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook) != 0) { }
                   while (System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorlSheet) != 0) { }
                   while (System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange) != 0) { }

                   xlApp = null;
                   xlWorkBook = null;
                   xlWorlSheet = null;
                   xlRange = null;

                   GC.Collect();
                   GC.WaitForPendingFinalizers();

                   dataGridView1.DataSource = dt;
               }
           }
       }


private void EXPORT_Click(object sender, EventArgs e)
       {

       }

1 Ответов

Рейтинг:
11

Garth J Lancaster

возможно

1) получить файл/путь с помощью диалогового окна

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
saveFileDialog1.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments); 
saveFileDialog1.Filter = "Your extension here (*.XML)|*.xml|All Files (*.*)|*.*" ; 
saveFileDialog1.FilterIndex = 1; 

if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    // Use saveFileDialog1.FileName);
}


2) неясно, какой "документ" вы хотите сохранить, но, предполагая, что "документ" был типа XDocument, то
document.Save(saveFileDialog1.FileName); 

в
Цитата:
// Используйте saveFileDialog1.имя файла);
сверху, вероятно, то, что вы ищете, т. е.

3) весь код, предполагающий, что вы устанавливаете документ где-то в своем коде ...

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
saveFileDialog1.InitialDirectory = Convert.ToString(Environment.SpecialFolder.MyDocuments); 
saveFileDialog1.Filter = "Your extension here (*.XML)|*.xml|All Files (*.*)|*.*" ; 
saveFileDialog1.FilterIndex = 1; 

if(saveFileDialog1.ShowDialog() == DialogResult.OK) 
{ 
    document.Save(saveFileDialog1.FileName);
}


Usarsef

документ, который я пытаюсь сохранить, - это документ, созданный на xdocument >> XDocument doc = new XDocument...

теперь ошибка такова : имя "doc" не существует в текущем контексте

Garth J Lancaster

Это похоже на проблему с областью действия - если вы объявили свой экземпляр " doc "локальным для другого обработчика или такого ... вам действительно нужно объявить его где-то "глобальным", чтобы он мог быть "загружен"? Импортируется в ваших терминах в одном обработчике, а затем экспортируется обработчиком, над которым вы работаете ... обычно где-то в приложении WinForms есть место, которое вы можете объявить таковым, но в данный момент я нахожусь на Mac без Visual Studio, так что не могу проверить....

Usarsef

Я решил эту проблему спасибо