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