none
Ado.Net и Excel RRS feed

  • Вопрос

  • Как можно сохранить таблицу из dataGridView в файл Excel?

    Возможно ли, при сохранении, отредактировать документ (ширина строк, шрифт, цвет, заштриховка ячеек... и т.д. и т.п.)???

    13 декабря 2010 г. 20:58

Ответы

  • 1) добавляем в References Microsoft.Office.Interop.Excel

    2) using Microsoft.Office.Interop.Excel;

    3) Код:

     

          // Создаем объект приложения Excel
          ApplicationClass excelApp = new ApplicationClass();
          // Создаем новую книгу
          Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
    
          // двумерный массив, который будет содержать все данные dataGridView, чтобы его сразу записать в Лист, а не по ячейки записывать. (так будет быстрее)
          object[,] rawData = new object[dataGridView1.Rows.Count + 1, dataGridView1.Columns.Count]; // строк на 1 больше - для заголовков
          // записываем заголовки
          for (int col = 0; col < dataGridView1.Columns.Count; col++)
          {
              rawData[0, col] = dataGridView1.Columns[col].HeaderText;
          }
    
          // записываем данные
          for (int row = 0; row < dataGridView1.Rows.Count; row++)
          {
              for (int col = 0; col < dataGridView1.Columns.Count; col++)
              {            
                  rawData[row, col] = dataGridView1.Rows[row].Cells[col].Value.ToString(); 
              }
          }
    
          // Рассчитываем буквы последней колонки в Excel
          string finalColLetter = string.Empty;
          string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
          int colCharsetLen = colCharset.Length;
    
          if (dataGridView1.Columns.Count > colCharsetLen)
          {
            finalColLetter = colCharset.Substring(
              (dataGridView1.Columns.Count - 1) / colCharsetLen - 1, 1);
          }
          finalColLetter += colCharset.Substring(
              (dataGridView1.Columns.Count - 1) % colCharsetLen, 1);
    
          // Создаем новый лист
          Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(
            excelWorkbook.Sheets.get_Item(1),
            Type.Missing, 1, XlSheetType.xlWorksheet);
    
          // имя листа
          excelSheet.Name = "Отчет";
          // диапозон, в который вставляем значения dataGridView
          string excelRange = string.Format("A1:{0}{1}",
              finalColLetter, dataGridView1.Rows.Count + 1);
          // вставляем значения
          excelSheet.get_Range(excelRange, Type.Missing).set_Value(Type.Missing, rawData);
    
          // устанавливаем жирный шрифт для заголовков
          ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
          // авто-размер столбцов
          excelSheet.Columns.AutoFit();
    
          // отображаем Excel документ
          excelApp.Visible = true;
    
    
    Также можете посмотреть How to automate Microsoft Excel from Microsoft Visual C#.NET

    И топик Как закрыть Excel файл


    Для связи [mail]
    • Помечено в качестве ответа Artem Makukha 13 декабря 2010 г. 22:40
    13 декабря 2010 г. 22:32

Все ответы

  • Пользовательский интерфейс сделан в Windows Forms.
    13 декабря 2010 г. 21:45
  • 1) добавляем в References Microsoft.Office.Interop.Excel

    2) using Microsoft.Office.Interop.Excel;

    3) Код:

     

          // Создаем объект приложения Excel
          ApplicationClass excelApp = new ApplicationClass();
          // Создаем новую книгу
          Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
    
          // двумерный массив, который будет содержать все данные dataGridView, чтобы его сразу записать в Лист, а не по ячейки записывать. (так будет быстрее)
          object[,] rawData = new object[dataGridView1.Rows.Count + 1, dataGridView1.Columns.Count]; // строк на 1 больше - для заголовков
          // записываем заголовки
          for (int col = 0; col < dataGridView1.Columns.Count; col++)
          {
              rawData[0, col] = dataGridView1.Columns[col].HeaderText;
          }
    
          // записываем данные
          for (int row = 0; row < dataGridView1.Rows.Count; row++)
          {
              for (int col = 0; col < dataGridView1.Columns.Count; col++)
              {            
                  rawData[row, col] = dataGridView1.Rows[row].Cells[col].Value.ToString(); 
              }
          }
    
          // Рассчитываем буквы последней колонки в Excel
          string finalColLetter = string.Empty;
          string colCharset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
          int colCharsetLen = colCharset.Length;
    
          if (dataGridView1.Columns.Count > colCharsetLen)
          {
            finalColLetter = colCharset.Substring(
              (dataGridView1.Columns.Count - 1) / colCharsetLen - 1, 1);
          }
          finalColLetter += colCharset.Substring(
              (dataGridView1.Columns.Count - 1) % colCharsetLen, 1);
    
          // Создаем новый лист
          Worksheet excelSheet = (Worksheet)excelWorkbook.Sheets.Add(
            excelWorkbook.Sheets.get_Item(1),
            Type.Missing, 1, XlSheetType.xlWorksheet);
    
          // имя листа
          excelSheet.Name = "Отчет";
          // диапозон, в который вставляем значения dataGridView
          string excelRange = string.Format("A1:{0}{1}",
              finalColLetter, dataGridView1.Rows.Count + 1);
          // вставляем значения
          excelSheet.get_Range(excelRange, Type.Missing).set_Value(Type.Missing, rawData);
    
          // устанавливаем жирный шрифт для заголовков
          ((Range)excelSheet.Rows[1, Type.Missing]).Font.Bold = true;
          // авто-размер столбцов
          excelSheet.Columns.AutoFit();
    
          // отображаем Excel документ
          excelApp.Visible = true;
    
    
    Также можете посмотреть How to automate Microsoft Excel from Microsoft Visual C#.NET

    И топик Как закрыть Excel файл


    Для связи [mail]
    • Помечено в качестве ответа Artem Makukha 13 декабря 2010 г. 22:40
    13 декабря 2010 г. 22:32
  • Большое спасибо, буду пробывать!!!
    13 декабря 2010 г. 22:39