nuget 上安裝 Microsoft.Office.Interop.Excel
文章內還是加入 Excel dll 作法,現在可以直接在 nuget 上安裝囉
C# Code
儲存格顏色
以前在 VFP 是透過 ColorIndex 來進行設定,詳見 [VFP] Automation 應用 - 改變 Excel 儲存格顏色 紀錄,官方文章是使用 Color 來進行設定,但使用顏色十進制來塞值,一整個不直覺
C# Code
using System;
using System.Collections.Generic;
using Excel = Microsoft.Office.Interop.Excel;
namespace Automation
{
internal class Program
{
static void Main(string[] args)
{
var bankAccounts = new List<Account>
{
new Account{ID = 345,Balance = 541.27m},
// 故意把數字變長,超過欄位寬度,AutoFit() 效果才能感受的到
new Account{ID = 999999999,Balance = -127.44m}
};
// 透過 delegate 來塞值並變化背景顏色
DisplayInExcel(bankAccounts, (account, cell) =>
{
cell.Value = account.ID;
cell.Offset[0, 1].Value = account.Balance;
if (account.Balance < 0)
{
cell.Interior.Color = Color.Red;
cell.Offset[0, 1].Interior.Color = 255;
}
});
}
/// <summary>
/// 顯示 Excel
/// </summary>
/// <param name="accounts">資料來源</param>
/// <param name="DisplayFunc">透過 Delegate 讓主程式可以自訂定義 Excel 內的商業邏輯</param>
static void DisplayInExcel(
IEnumerable<Account> accounts,
Action<Account, Excel.Range> DisplayFunc)
{
var excelApp = new Excel.Application();
excelApp.Workbooks.Add();
excelApp.Visible = true;
excelApp.Range["A1"].Value = "ID";
excelApp.Range["B1"].Value = "Balance";
// 設定下述迴圈起點
excelApp.Range["A2"].Select();
foreach (var ac in accounts)
{
DisplayFunc(ac, excelApp.ActiveCell);
excelApp.ActiveCell.Offset[1, 0].Select();
}
// 把 A1:B3 這範圍內容複製至剪貼簿
excelApp.Range["A1:B3"].Copy();
// 調整資料行寬度來完全顯示內容。
excelApp.Columns[1].AutoFit();
excelApp.Columns[2].AutoFit();
}
}
public class Account
{
public int ID { get; set; }
public decimal Balance { get; set; }
}
}
儲存格顏色
以前在 VFP 是透過 ColorIndex 來進行設定,詳見 [VFP] Automation 應用 - 改變 Excel 儲存格顏色 紀錄,官方文章是使用 Color 來進行設定,但使用顏色十進制來塞值,一整個不直覺
cell.Interior.Color = Color.Red;
cell.Offset[0, 1].Interior.Color = 255;
官方文章都是透過 Range.Select() 來進入指定 cell,但一直覺得不是該使用 Range.Activate();,在該篇官方文章 Working with the Active Cell 有說明
複製至剪貼簿
To select a range of cells, use the Select method. To make a single cell the active cell, use the Activate method.
excelApp.Range["A1:B3"].Copy();
執行後在 txt 上直接貼上就可以看見啦
調整資料行寬度來完全顯示內容
excelApp.Columns[1].AutoFit();
沒有留言:
張貼留言