RydenChoi Ответов: 0

Как изменить(или контролировать) порядок (последовательность) листов excel при экспорте из набора данных с помощью C#


Я сделал метод экспорта файла excel из набора данных.

У меня есть 5 баз данных в наборе данных, и каждое имя приведено ниже

таблицы[0] - веб-приложение, таблицы[1] - база данных контента, таблицы[2] - семейство сайтов,

таблицы[3] - Сети, таблицы[4] - списки

А после экспорта результат получается такой

[Щелчок]

Это хорошо работает, но я хочу сделать вот так.

Веб-Приложение, База Данных Контента, Семейство Сайтов, Веб-Сайты, Списки

Мой код ниже, пожалуйста, скажите мне, как я могу изменить код.

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

private bool ExportToExcel(DataSet ds, string fileName)
   {
       string saveFileName = "";
       string worksheetName = string.Empty;

       SaveFileDialog saveDialog1 = new SaveFileDialog();
       this.Invoke(new MethodInvoker(delegate()
       {
           saveDialog1.DefaultExt = "xlsx";
           saveDialog1.Filter = "Excel file|*.xlsx";
           saveDialog1.FileName = fileName;
           saveDialog1.ShowDialog();
       }));
       saveFileName = saveDialog1.FileName;

       if (saveFileName.IndexOf(":") < 0)
           return false;

       Excel.Application xlApp = new Excel.Application();

       if (xlApp == null)
       {
           MessageBox.Show("Can`t create Excel");
           return false;
       }

       Excel.Workbooks workBooks = xlApp.Workbooks;
       Excel.Workbook workBook = xlApp.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
       Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Worksheets[1];

       try
       {
           if (ds.Tables.Count > 0)
           {
               //total Tables Count in Dataset
               for (int index = 0; index < ds.Tables.Count; index++)
               {
                   //Count the Tables Column
                   for (int i = 0; i < ds.Tables[index].Columns.Count; i++)
                   {
                       //Write Column Name to worksheet
                       workSheet.Cells[1, i + 1] = ds.Tables[index].Columns[i].ColumnName;
                   }
                   //Rows Total Count
                   for (int r = 0; r < ds.Tables[index].Rows.Count; r++)
                   {
                       for (int i = 0; i < ds.Tables[index].Columns.Count; i++)
                       {
                           //Write data to each rows
                           workSheet.Cells[r + 2, i + 1] = ds.Tables[index].Rows[r][i].ToString();
                       }
                       Application.DoEvents();
                   }
                   //Column Name - Bold
                   ((Excel.Range)workSheet.Rows[1, Type.Missing]).Font.Bold = true;

                   //Auto Fit the column
                   workSheet.Columns.EntireColumn.AutoFit();

                   //set WorkSheet Name
                   if (index == 0)
                   {
                       workSheet.Name = "Web Application";
                   }
                   else if (index == 1)
                   {
                       workSheet.Name = "Content Database";
                   }
                   else if (index == 2)
                   {
                       workSheet.Name = "Site Collection";
                   }
                   else if (index == 3)
                   {
                       workSheet.Name = "Webs";
                   }
                   else if (index == 4)
                   {
                       workSheet.Name = "Lists";
                   }
                   else
                   {
                       workSheet.Name = ds.Tables[index].TableName;
                   }

                   if (index < ds.Tables.Count - 1)
                   {
                       workSheet = (Excel.Worksheet)workBook.Worksheets.Add();
                   }

               }
           }
           else
           {
               MessageBox.Show("No tables returned.");
           }

       }

       catch (Exception ex)
       {
           logManager.WriteLog(ex.ToString());
       }

       if (saveFileName != null)
       {
           try
           {


               workBook.Saved = true;
               workBook.SaveCopyAs(saveFileName);
           }
           catch (Exception ex)
           {
               MessageBox.Show("Error, File is already Opened!\n" + ex.Message);
           }
       }
       xlApp.Quit();
       GC.Collect();

       this.Invoke(new MethodInvoker(delegate()
       {
           pgstatusbar.MarqueeAnimationSpeed = 0;
           pgstatusbar.Visible = false;
       }));
       MessageBox.Show("Excel file saved!", "Message", MessageBoxButtons.OK, MessageBoxIcon.Information);

       return true;
   }

Dave Kreskowiak

Это может показаться глупым, но нужно ли пытаться экспортировать таблицы в обратном порядке? Переверните цикл, например, от 4 до 0.

RydenChoi

Ладно, я дурак, так почему бы тебе не показать мне свой прекрасный код на этот счет?

Dave Kreskowiak

У вас есть цикл, проходящий через таблицы в наборе данных:

//total Tables Count in Dataset
    for (int index = 0; index < ds.Tables.Count; index++)
    {

Обратный цикл:
//total Tables Count in Dataset
    for (int index = ds.Tables.Count - 1; index >= 0; index--)
    {

RydenChoi

Да. Я изменил его, а также изменил другие коды, наконец-то работает хорошо.
Это может быть легко, но я всего лишь новичок в этом деле......
И я понял, что мне нужно много практиковаться.. Спасибо за ваш совет Дейву Кресковяку.

0 Ответов