0

こんにちは、ボタンの配列を使用してグリッドを生成する小さなプログラムがあります。ボタンをクリックすると、色が変わります。このレイアウトをフォームに正確にエクスポートするにはどうすればよいですか? Excel のセルでボタンを表現したい

私のプログラムは次のようになります。ここに画像の説明を入力

グリッドの作成方法:

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

         }
4

2 に答える 2

1

Microsoft Excel COM コンポーネントを使用できます。

まず、参照として Microsoft Excel XX.X Object Library を追加する必要があります (私の場合は 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);
}
于 2013-03-20T21:21:15.173 に答える
-1

あなたがしなければならないことは、すぐに使えるデータでいくつかの配列を作成して、2つのことを行うことができるようにすることです:

  1. その配列に基づいてボタンを生成します。
  2. この配列をCSVなどの MS Excel にエクスポートします。

だからその行をドロップアウト

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

配列にデータを入力します。

于 2013-03-20T19:47:47.003 に答える