2

私は最近、自分の仕事で c# を使用して Excel スプレッドシートを作成できるかどうかを確認したいと考えていました。基本を学ぶために簡単なプログラム (以下のコードを参照) を作成しました。今では、Excel を開くたびに、コードによって生成されたスプレッドシートが表示されます。これが起こらないようにするにはどうすればよいですか?

namespace ExcelAddIn1
{
    public partial class ThisAddIn
    {
        private void ThisAddIn_Startup(object sender, System.EventArgs e)
        {
            var bankAccounts = new List<Account>
            {
             new Account
             {
                ID = 1, 
                Balance = 50.00, 
                Payee = "Debit", 
                PayDate = DateTime.Today
             }
            };

            DisplayInExcel(bankAccounts, (account, cell) =>
                //This multiline lamda expression sets 
                //custom processing rules for bankAccounts.
                {
                    cell.Value = account.ID;
                    cell.Offset[0, 1].Value = account.Balance;
                    cell.Offset[0, 2].Value = account.Payee;
                    cell.Offset[0, 3].Value = account.PayDate;
                    if (account.Balance < 0)
                    {
                        cell.Interior.Color = 255;
                        cell.Offset[0, 1].Interior.Color = 255;
                    }
                });
        }

        private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
        {
        }

        void DisplayInExcel(
            IEnumerable<Account> accounts, 
            Action<Account, 
            Excel.Range> DisplayFunc)
        {
            var excelApp = this.Application;
            // Add a new Excel workbook.
            excelApp.Visible = true;
            excelApp.Workbooks.Add();

            #region cellValues
            excelApp.Range["A1"].Value = "ID";
            excelApp.Range["B1"].Value = "Balance";
            excelApp.Range["C1"].Value = "Payee";
            excelApp.Range["D1"].Value = "Date";
            excelApp.Range["A2"].Select();

            foreach (var ac in accounts)
            {
                DisplayFunc(ac, excelApp.ActiveCell);
                excelApp.ActiveCell.Offset[1, 0].Select();

            }
            #endregion

            // Copy the results to Clipboard.
            excelApp.Range["A1:D2"].Copy();

            excelApp.Columns[1].AutoFit();
            excelApp.Columns[2].AutoFit();
            excelApp.Columns[3].AutoFit();
            excelApp.Columns[4].AutoFit();
        }

        #region VSTO generated code

        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InternalStartup()
        {
            this.Startup += new System.EventHandler(ThisAddIn_Startup);
            this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
        }

        #endregion
    }
}
4

1 に答える 1

0

Startup-event を使用しているため、Excel を起動するたびにこのコードが起動されます。Excel 自体でアドインを無効にすると、問題が解決します。

于 2012-09-20T08:14:24.830 に答える