2013-03-20 3 views
0

Привет У меня есть небольшая программа, которая генерирует сетку, используя массив кнопок. при нажатии на кнопки они меняют цвет. Как я могу экспортировать этот макет в Ms Excel точно так, как это делается в форме, возможно ли это? Я хочу, чтобы ячейки в Excel, чтобы представить кнопкиЭкспорт сетки сетки экспорта в Ms Excel

Моя программа выглядит следующим образом: enter image description here

Как создать свою сетку:

int col = 7; 
int row = 4; 
int count = 0; 
Button[][] buttons; 

public void placeRows() 
     { 
      for (int r = 0; r < row; r++) 
      { 
       createColumns(r); 
      } 
     } 

     public void createColumns(int r) 
     { 
      int s = r * 25; //gap 
      for (int c = 0; c < col; c++) 
      { 
       buttons[r][c] = new Button(); 
       buttons[r][c].SetBounds(75 * c, s, 75, 25); 
       buttons[r][c].Text = Convert.ToString(c); 
       buttons[r][c].Click += new EventHandler(grid_Click); 
       panel1.Controls.Add(buttons[r][c]); 
      } 
     } 

private void Form1_Load(object sender, EventArgs e) 
     { 
      placeRows(); 
     } 

void grid_Click(object sender, EventArgs e) 
     { 
      Button button = sender as Button; 

      if (count == 0) 
      { 
       button.BackColor = Color.Red; 
       count++; 
      } 

      else if (count == 1) 
      { 
       button.BackColor = Color.Blue; 
       count--; 
      } 
     } 

private void btnExport_Click(object sender, EventArgs e) 
     { 
      //have no idea how to start this 

     } 
+0

отсутствием ответов я предполагаю, что это очень трудно сделать, или даже невозможно !!! – Tacit

ответ

1

Вы можете использовать компонент Microsoft Excel COM.

Сначала вы должны добавить в качестве ссылки библиотеку объектов Microsoft Excel XX.X (в моем случае я использую 12.0).

Ниже приведен простой класс, который создает новый рабочий лист с данными из набора кнопок. Если вы хотите сохранить свое рабочее пространство, вы должны раскомментировать app.SaveWorkspace(excelName); в методе Do.

using Microsoft.Office.Interop.Excel; 

namespace SimpleExcelExport 
{ 
    class Export 
    { 
     public Export(bool defaultBackgroundIsWhite) 
     { 
      this.defaultBackgroundIsWhite = defaultBackgroundIsWhite; 

      app = new Application(); 
      app.Visible = true; 
      workbook = app.Workbooks.Add(1); 
      worksheet = (Worksheet)workbook.Sheets[1]; 
     }  

     public void Do(string excelName, System.Windows.Forms.Button[][] array) 
     { 
      for (int i = 0; i <= array.GetUpperBound(0); i++) 
      { 
       for (int j = 0; j <= array[i].GetUpperBound(0); j++) 
       { 
        AddData(i, j, array[i][j]); 
       } 
      } 

      //app.SaveWorkspace(excelName); 
     }    

     private void AddData(int row, int col, System.Windows.Forms.Button button) 
     { 
      if (button == null) return; 
      row++; 
      col++; 
      Range range = worksheet.Cells[row, col]; 
      if (!defaultBackgroundIsWhite) 
      range.Interior.Color = button.BackColor.ToArgb(); 
      else 
       range.Interior.Color = button.BackColor.Name != "Control" ? button.BackColor.ToArgb() : System.Drawing.Color.White.ToArgb(); 
      range.NumberFormat = ""; 
      worksheet.Cells[row, col] = button.Text; 
     } 

     private Application app = null; 
     private Workbook workbook = null; 
     private Worksheet worksheet = null; 
     private Range workSheet_range = null; 
     private bool defaultBackgroundIsWhite; 
    } 
} 

Пример использования:

private void btnExport_Click(object sender, EventArgs e) 
{ 
    Export ep = new Export(true); 
    ep.Do("test.xsl", buttons); 
} 
+0

файл excel создается правильно, но этот диапазон строк.Interior.Color = button.BackColor.Name! = "Control"? button.BackColor.ToArgb(): System.Drawing.Color.White.ToArgb(); выдает исключение после завершения экспорта, он говорит, что NullReferenceExceptionunhundled – Tacit

+0

@Tacit, можете ли вы проверить, какой элемент равен NULL? – kmatyaszek

+0

button.BackColor.Name и button.BackColor.ToArgb() – Tacit

-1

То, что вы должны сделать, это создать некоторый массив данных - уже в использовании, поэтому вы можете сделать 2 вещи:

  1. Создайте свои кнопки на основе этого массива.
  2. Экспортируйте этот массив в MS Excel, например CSV.

Так выпадать, что линия

panel1.Controls.Add(buttons[r][c]); 

и заполнить ваш массив с данными.

+0

Спасибо, я посмотрю, что – Tacit

+0

Как я могу отказаться от этой строки. Если я сделаю это, моя сетка не будет отображаться на форме. panel1 удерживает сетку – Tacit

+0

@Tacit Вам необходимо заполнить новый массив или список своими данными. После этого используйте этот массив или список, чтобы создать свои кнопки. Но сохраните этот массив или список как глобальную переменную, чтобы вы могли экспортировать данные в MS Excel. –