前提
作業系統需要安裝有Excel
添加Microsoft Excel 16.0 Object Library參考(以系統安裝的版本為準)

閱讀材料:https://docs.microsoft.com/zh-cn/office/client-developer/excel/excel-home
創建Excel電子表格
類別庫參考 using Excel = Microsoft.Office.Interop.Excel;
Excel.Application app = new Excel.Application();// 始化Excel應用程式物件
if (app == null) // 檢查系統是否已安裝Excel
{
MessageBox.Show("Excel未正確安裝!");
return;
}
object misValue = https://www.cnblogs.com/zhuanghamiao/archive/2022/03/15/System.Reflection.Missing.Value;// 作業簿模板
Excel.Workbook book = app.Workbooks.Add(misValue);// 如果此引數為指定現有 Microsoft Excel 檔案名的字串,那么創建新作業簿將以該指定的檔案作為模板,如果此引數為常量,新作業簿將包含一個指定型別的作業表, 可以是以下 XlWBATemplate 常量之一:xlWBATChart、xlWBATExcel4IntlMacroSheet、xlWBATExcel4MacroSheet 或 xlWBATWorksheet,如果省略此引數,Microsoft Excel創建一個包含大量空白作業表的新作業簿(由 SheetsInNewWorkbook 屬性設定)
Excel.Worksheet sheet = (Excel.Worksheet)book.Worksheets.get_Item(1); // 獲取作業表
sheet.Cells[1, 1] ="ID";
sheet.Cells[1, 2] = "Name";
sheet.Cells[2, 1] = "1001";
sheet.Cells[2, 2] = "張三";
sheet.Cells[3, 1] = "1002";
sheet.Cells[3, 2] = "李四";
book.SaveAs("名單表.xls",Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); // 保存電子表格
book.Close(true, misValue, misValue);
app.Quit();
// 資源清理
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(app);
打開Excel電子表格
object misValue = https://www.cnblogs.com/zhuanghamiao/archive/2022/03/15/System.Reflection.Missing.Value;
Excel.Application app = new Excel.Application();// 始化Excel應用程式物件
var book = app.Workbooks.Open("名單表.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); // 打開電子表格
var sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
var cells = sheet.get_Range("A1", "B2").Value; // 獲取單元格范圍
Console.WriteLine(cells[2, 2]);
book.Close(true, misValue, misValue);
app.Quit();
// 資源清理
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(app);
讀取Excel電子表格
object misValue = https://www.cnblogs.com/zhuanghamiao/archive/2022/03/15/System.Reflection.Missing.Value;
Excel.Application app = new Excel.Application();// 始化Excel應用程式物件
var book = app.Workbooks.Open(@"名單表.xls", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
var sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
Excel.Range range = sheet.UsedRange; //指定作業表上的已用區域, 此為只讀屬性
for (int i = 1; i <= range.Rows.Count; i++)
{
for (int j = 1; j <= range.Columns.Count; j++)
{
Console.WriteLine((range.Cells[i, j] as Excel.Range).Value);
// Console.WriteLine((range.Cells[i, j] as Excel.Range).Value2); // 此屬性和 Value 屬性之間的唯一區別是 Value2 屬性不使用 Currency 和 Date 資料型別, 可以通過使用 Double 資料型別,以浮點數形式回傳這些資料型別格式的數值,https://docs.microsoft.com/zh-cn/office/vba/api/excel.range.value2
}
}
book.Close(true, null, null);
app.Quit();
Marshal.ReleaseComObject(sheet);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(app);
新增一個作業表
Excel.Application app = new Excel.Application();// 始化Excel應用程式物件
app.DisplayAlerts = false;
var book = app.Workbooks.Open(@"名單表.xls", 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Sheets sheets = book.Worksheets;// 該集合代表指定作業簿中所有作業表, Sheets物件只讀
var newSheet = (Excel.Worksheet)sheets.Add(sheets[1], Type.Missing, Type.Missing, Type.Missing); // 邢增一個作業表
newSheet.Name = $"Sheet{book.Worksheets.Count}";
newSheet.Cells[1, 1] = "新增的作業表";
newSheet = (Excel.Worksheet)book.Worksheets.get_Item(2);
newSheet.Select(); // 選擇 (替換),若要使單個作業表成為活動作業表,請使用 Activate 方法, https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.select
book.Save();
book.Close(true, null, null);
app.Quit();
Marshal.ReleaseComObject(newSheet);
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(app);
打開檔案時注意設定檔案的ReadOnly屬性為false
洗掉一個作業表
Excel.Application app = new Excel.Application();// 始化Excel應用程式物件
app.DisplayAlerts = false; // 要洗掉作業表但不顯示對話框,請將 Application.DisplayAlerts 屬性設定為 False,
var book = app.Workbooks.Open(@"名單表.xls", 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
Excel.Sheets sheets = book.Worksheets;
sheets["Sheet1"].Delete(); // https://docs.microsoft.com/zh-cn/office/vba/api/excel.worksheet.delete
book.Save();
book.Close(true, null, null);
app.Quit();
Marshal.ReleaseComObject(sheets);
Marshal.ReleaseComObject(book);
Marshal.ReleaseComObject(app);
加載Excel資料到DataGridView
string filePath = @"C:\Users\zhm\Documents\成績表.xlsx";
string connectString = $"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={filePath};Extended Properties='Excel 8.0;HDR=YES'";
// xls 連接串 connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"
string sqltext = "select * from [Sheet1$]";
using (var connection = new OleDbConnection(connectString))
using (var adapter = new OleDbDataAdapter(sqltext, connection))
{
adapter.TableMappings.Add("Table", "Score");
var dtSet = new DataSet();
adapter.Fill(dtSet);
dataGridView1.DataSource = dtSet.Tables[0];
}
通過ODBC可以更簡單的實作Excel表格資料的增刪查改操作https://docs.microsoft.com/zh-cn/office/vba/api/excel.odbcconnection
格式化電子表格

var book = app.Workbooks.Open(@"成績表.xlsx", 0, false, 5, "", "", true, Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
var sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
var headerRange = sheet.get_Range("A1", "D1");
headerRange.Font.Bold = true;// 字體加粗
headerRange.Font.Color = Color.Red;// 字體顏色設定
headerRange.Interior.Color = Color.LightBlue; // 單元格內部顏色
var courseRange = sheet.get_Range("C1", "C7");
courseRange.VerticalAlignment = XlVAlign.xlVAlignCenter;// 垂直居中 https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlvalign
courseRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;// 水平居中 https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlhalign
var cellsRange = sheet.get_Range("A1", "D7");
cellsRange.Borders.Color = Color.Black; // 邊框線顏色 https://docs.microsoft.com/zh-cn/office/vba/api/excel.borders
格式調整后

更多設定參考https://docs.microsoft.com/zh-cn/office/vba/api/excel.range(object)
向作業表中插入一張圖片
// ...省略打開檔案的代碼
var sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
sheet.Shapes.AddPicture(@"C:\Users\zhm\Pictures\vs.png", MsoTriState.msoFalse, MsoTriState.msoCTrue, 120, 150, 300, 45); // 向作業表中插入一張圖片
sheet.SetBackgroundPicture(@"C:\Users\zhm\Pictures\vsbg.jpg"); // 設定作業表背景圖
book.Save();
// ...省略釋放資源的代碼
添加圖片引數說明https://docs.microsoft.com/zh-CN/office/vba/api/Excel.Shapes.AddPicture
向作業表中添加圖表

// ...省略打開檔案的代碼
Excel.ChartObjects charts = (Excel.ChartObjects)sheet.ChartObjects(Type.Missing);
Excel.ChartObject chartPosition = (Excel.ChartObject)charts.Add(240, 20, 300, 250);
Excel.Chart chartPage = chartPosition.Chart;
Excel.Range chartRange = sheet.get_Range("A1", "D7");
chartPage.SetSourceData(chartRange, misValue); // 設定源資料區域
chartPage.ChartType = Excel.XlChartType.xl3DLine; // 圖示型別設定
book.Save();
// ...省略釋放資源的代碼
還可以通過圖示物件的Export方法將生成的圖表以圖形格式匯出
// 匯出圖表
chartPage.Export(@"C:\Users\zhm\Desktop\scores.bmp", "BMP",misValue );
圖表型別設定參考https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlcharttype
電子表格資料驗證

//... 打開電子表格
var sheet = (Excel.Worksheet)book.Worksheets.get_Item(1);
var cellsRange = sheet.get_Range("D2", "D7");
cellsRange.Validation.Add(Excel.XlDVType.xlValidateCustom, XlDVAlertStyle.xlValidAlertStop, XlFormatConditionOperator.xlBetween, 0,
100);
cellsRange.Validation.IgnoreBlank = true; // 指定區域內的資料有效性檢驗允許空值,則該值為 True
cellsRange.Validation.InputTitle = "提示";
cellsRange.Validation.InputMessage = "請輸入分數"; // 設定資料有效性檢驗輸入資訊
cellsRange.Validation.ErrorMessage = "只允許輸入>=0或者<=100的分數"; //設定資料有效性檢驗錯誤訊息
cellsRange.Validation.ErrorTitle = "分數區域0~100";
//... 保存關閉電子表格

資料驗證設定參考https://docs.microsoft.com/zh-cn/office/vba/api/excel.validation
獲取更多關于Excel的工具https://www.nuget.org/packages?q=Excel
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/444281.html
標籤:.NET技术
上一篇:goget:當前分支沒有跟蹤資訊
下一篇:.NET CORE 授權
