Microsoft.Office.Interop.Excel 的簡單操作
- 1、安裝 Microsoft.Office.Interop.Excel
- 2、聲明引用 Microsoft.Office.Interop.Excel
- 3、簡單的新建 EXCEL 操作代碼
- 4、將 DataGridView 表數據寫到 EXCEL 操作代碼
- 5、將 EXCEL 表數據讀取到 C# 數據表 DataTable 操作代碼
1、安裝 Microsoft.Office.Interop.Excel
新建 C# 工程后,在【項目】菜單中點擊【管理 NuGet 程序包】,瀏覽搜索 Microsoft.Office.Interop.Excel,點擊下載安裝。
2、聲明引用 Microsoft.Office.Interop.Excel
using System.Data;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
using Excel = Microsoft.Office.Interop.Excel; //指定別名
3、簡單的新建 EXCEL 操作代碼
Excel.Application excelApp = new Excel.Application //定義Excel應用對象,別名以區別 C# 應用{Visible = false,//設置后臺運行可見性為falseDisplayAlerts = false,//禁止彈出警告AlertBeforeOverwriting = false//禁止覆蓋前彈出提醒};if (excelApp == null) return;//系統沒有Excel對象Excel.Workbook workbook = excelApp.Workbooks.Add();// 添加 Excel 工作簿(Workbook)workbook.Worksheets.Add(Type.Missing, workbook.Worksheets[1], 2, Type.Missing);// 在默認的 sheet1之后添加 2 個工作表Excel.Worksheet sheet1 = (Excel.Worksheet)workbook.Worksheets[1] as Excel.Worksheet;//定義Excel工作表Excel.Worksheet sheet2 = (Excel.Worksheet)workbook.Worksheets[2] as Excel.Worksheet; Excel.Worksheet sheet3 = (Excel.Worksheet)workbook.Worksheets[3] as Excel.Worksheet; // 命名工作表sheet1.Name = "測試";sheet2.Name = "宋體標題";sheet3.Name = "黑體標題";string[] headers = new string[] { "單位", "名稱", "屬性", "型號", "序列號" };Excel.Range headerRange = sheet2.Range[sheet2.Cells[1, 1], sheet2.Cells[1, headers.Length]];headerRange.Value2 = headers;headerRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中headerRange.VerticalAlignment = Excel.XlHAlign.xlHAlignCenter;//垂直居中headerRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//設置邊框headerRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//邊框常規粗細headerRange.WrapText = true;//自動換行headerRange.NumberFormatLocal = "@";//文本格式headerRange.Font.Name = "宋體";//設置字體headerRange.Font.Size = 12;//字體大小headerRange.Font.Bold = false;//字體加粗sheet2.Columns.AutoFit();//設置列寬和數據一致headerRange = sheet3.Range[sheet3.Cells[1, 1], sheet3.Cells[1, headers.Length]];headerRange.Value2 = headers;headerRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中headerRange.VerticalAlignment = Excel.XlHAlign.xlHAlignCenter;//垂直居中headerRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//設置邊框headerRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//邊框常規粗細headerRange.WrapText = true;//自動換行headerRange.NumberFormatLocal = "@";//文本格式headerRange.Font.Name = "黑體";//設置字體headerRange.Font.Size = 12;//字體大小headerRange.Font.Bold = true;//字體加粗sheet3.Columns.AutoFit();workbook.SaveAs(Application.StartupPath + @"\1234.xlsx");//保存文件workbook.Close(false);//關閉工作簿excelApp.Quit();//退出對象Marshal.ReleaseComObject(workbook);Marshal.ReleaseComObject(excelApp);//釋放COM對象的引用workbook = null;excelApp = null;if (excelApp == null) MessageBox.Show("已經創建EXCEL文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
4、將 DataGridView 表數據寫到 EXCEL 操作代碼
public void WriteExcelFromDgv(DataGridView dgv){Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application //定義Excel應用對象{Visible = false,//設置后臺運行可見性為falseDisplayAlerts = false,//禁止彈出警告AlertBeforeOverwriting = false//禁止覆蓋前彈出提醒};Excel.Workbook workbook = excelApp.Workbooks.Add();//定義Excel工作簿// Worksheet worksheet = workbook.ActiveSheet;//定義Excel工作表Excel.Worksheet worksheet = workbook.Worksheets[1];//定義默認Excel工作表int rowCount = dgv.Rows.Count;//獲取總行數int columnCount = dgv.Columns.Count;//獲取總列數for (int i = 0; i < columnCount; i++){worksheet.Cells[1, i + 1] = dgv.Columns[i].HeaderText;//填寫列標題worksheet.Cells[1, i + 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中worksheet.Cells[1, i + 1].VerticalAlignment= Excel.XlHAlign.xlHAlignCenter;//垂直居中}for (int i = 0; i < rowCount - 1; i++){for (int j = 0; j < columnCount; j++){worksheet.Cells[i + 2, j + 1] = dgv.Rows[i + 1].Cells[j].Value;//填寫表格數據worksheet.Cells[i + 2, j + 1].HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中worksheet.Cells[i + 2, j + 1].VerticalAlignment= Excel.XlHAlign.xlHAlignCenter;//垂直居中 }}worksheet.Columns.AutoFit();//設置列寬和數據一致worksheet.SaveAs(Application.StartupPath + @"\DataGridViewData.xlsx");//保存文件workbook.Close(false);//關閉工作簿excelApp.Quit();//退出對象Marshal.ReleaseComObject(workbook);Marshal.ReleaseComObject(excelApp);//釋放COM對象的引用workbook = null;excelApp = null;if (excelApp == null) MessageBox.Show("數據已經寫入到 EXCEL 文件", "提示", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);}
5、將 EXCEL 表數據讀取到 C# 數據表 DataTable 操作代碼
/// <summary>將 EXCEL 表數據讀取到 C# 數據表 DataTable</summary>/// <param name="filePath">EXCEL 文件路徑</param>/// <param name="columnsToExtract">讀取列數</param>/// <param name="skipRows">跳過行數</param>/// <returns>返回數據表 dataTable </returns>public DataTable ReadExcelToDataTable(string filePath,int[] columnsToExtract, int skipRows=2){Excel.Application excelApp = new Excel.Application();Excel.Workbook workbook = excelApp.Workbooks.Open(filePath);Excel.Worksheet worksheet = workbook.Sheets[1];//第一個sheetExcel.Range usedRange = worksheet.UsedRange;int rowCount = usedRange.Rows.Count;int colCount = columnsToExtract.Length;DataTable dataTable=new DataTable();object[,] valueArray = (object[,])usedRange.Value;for (int row = skipRows; row <= rowCount; row++){DataRow dataRow = dataTable.NewRow();for (int col = 0; col < colCount; col++){int colIndex = columnsToExtract[col];dataRow[col] = valueArray[row, colCount]?.ToString() ?? string.Empty;}dataTable.Rows.Add(dataRow);}workbook.Close(false);excelApp.Quit();Marshal.ReleaseComObject(excelApp);//釋放COM對象的引用return dataTable;}