VSTO學習寫起來感覺比較像是字典,寫了好多的函數
不過比較常使用的函數,其實也都介紹的差不多了,最後在寫一篇應該就結束了
接續上一篇繼續介紹如何使用C#來操控EXCEL欄位以及格式
editBox取值
前幾張有提到dropdown的取值,這邊在補上editBox的取值方法
也可以輸入值進去
//讀取
var data = Globals.Ribbons.Ribbon1.editBox2.Text;
//寫入
Globals.Ribbons.Ribbon1.editBox2.Text = "123";
插入COL欄位
Excel.Range x2Range = Globals.Sheet2.Range["A:AZ"];
x2Range.Range["N1"].EntireColumn.Insert();
清除內容
但保留儲存格格式
Globals.ws.Cells.ClearContents();
獲取當前使用行列數
獲取EXCEL使用行列數,如果操控EXCEL新增行列後,則要重新讀取,才能在獲取當前新行列數
int RowCount = Globals.Sheet1.UsedRange.Rows.Count;//資料列用了多少列
int ColCount = Globals.Sheet1.UsedRange.Columns.Count;//資料列用了多少欄
獲取當前COL有資料的CELLS有多少格
//取得使用ROW的數量
Excel.Workbook workbook = Globals.ThisWorkbook.InnerObject;
Excel.Worksheet worksheet = (Excel.Worksheet)workbook.ActiveSheet;
Excel.Range range = worksheet.Range["B:B"];
int usedRowsCount = (int)worksheet.Application.WorksheetFunction.CountA(range);
刪除重複出現的資料
這個範圍如果有重複出現的資料那就會只留下一筆其餘刪除
Excel.Range x1Range = Globals.Sheet1.Range["A:AZ"];//先讀取範圍
x1Range.RemoveDuplicates(2);//刪除重複行
姓名 | 年齡 | 年齡 |
---|---|---|
John | 25 | USA |
Mary | 30 | UK |
John | 25 | USA |
Alex | 28 | Canada |
Mary | 30 | UK |
John | 30 | USA |
變化後如下
姓名 | 年齡 | 年齡 |
---|---|---|
John | 25 | USA |
Mary | 30 | UK |
Alex | 28 | Canada |
取得CELLS的值
可以單一取的CELLS值,也可以是範圍取得最後匯入C# obj物件中,範圍取得放在下一個範例中介紹
var x = x1Range.Cells[1, 22].Text();
var x = x1Range.Cells[1, 22].value2;
連結outlook發送郵件
這一部分比較特別些,但畢竟都是office軟件所以可以一起使用
需要匯入using Outlook,另外一般資料都是C# 流向EXCEL,這邊可以反向流回也就是讀取
文件內容也可以使用表格格式等等,不過要使用HTML格式來寫入
所以使用for loop + string來串起整個HTML字串,最後匯入MAIL 文件內容中
using Outlook = Microsoft.Office.Interop.Outlook;
//MAIL函數
Outlook.Application outlookApp = new Outlook.Application();
Outlook.MailItem mailItem =(Outlook.MailItem)outlookApp.CreateItem(Outlook.OlItemType.olMailItem);
//標題 & 收件人
mailItem.Subject = "標題";
mailItem.To = "收件人";
//反向從EXCEL取得內容匯入C# obj物件
Excel.Range content = ws.Range[$"A1:N{usedRowsCount}"];
object[,] cellData = (object[,])content.Value;
//FIRST ROW
for (int row = 0; row < 1; row++)
{
tableHtml += "<tr style=background:#32CD32;>";
for (int col = 0; col < cellData.GetLength(1); col++)
{
tableHtml += "<td><font face=DFKai - sb>" + cellData[row+1, col+1] + "</font></td>";
}
tableHtml += "</tr>";
}
for (int row = 1; row < cellData.GetLength(0); row++)
{
tableHtml += "<tr style=background:#FCE6C9; >";
for (int col = 0; col < cellData.GetLength(1); col++)
{
tableHtml += "<td><font face=DFKai - sb>" + cellData[row + 1, col + 1] + "</font></td>";
}
tableHtml += "</tr>";
}
tableHtml += "</tbody>";
tableHtml += "</table>";
tableHtml += "</body></html>";
//內容匯入MAIL
mailItem.HTMLBody = tableHtml;
//寄送
mailItem.Send();
將儲存格上色
//先取得當前使用的工作簿
Excel.Workbook ws = Globals.ThisWorkbook.Application.ActiveWorkbook;
//上色範圍
Excel.Range range = ws.Range[ws.Cells[1, 1], ws.Cells[1, dt.Columns.Count]];
//選取當前工作簿的哪一個sheet
Excel.Worksheet worksheet = ws.Sheets[worksheetName];
//C#顏色模塊
var color_number = "#ADD8E6" //色號
int argbColor = System.Drawing.ColorTranslator.FromHtml(color_number).ToArgb();
//套用到要上色的範圍中
range.Interior.Color = argbColor;
常用的功能應該都介紹差不多了
若未來還有比較新奇的功能會再慢慢補上