私は最近、自分の仕事で 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
}
}