首先 引入 Excel的命名空間
using Microsoft.Office.Interop.Excel;
創建Excel需要 創建Excel ' 運行環境' Application 類
Excel中 由 ‘工作薄’ Workbook 和 '頁' Worksheet 兩個類組成
層級 依賴 關系為
Application
Workbook
Worksheet
//創建一個Excel運行環境
Application app = new Application();
//
app.Visible = false;
//創建Excel中的工作薄
Workbook wb = (Workbook)app.Workbooks.Add(Missing.Value);
//創建Excel工作薄中的 頁 sheet
Worksheet sheet =(Worksheet ) wb.ActiveSheet;
sheet下 由 單元格組成 cells sheet.cells[RowIndex,ColumnIndex]= 根據行號和列號來定位單元格 賦值
設置表頭 給 第二列賦值 第一列還有用

sheet.Cells[2, 1] = "航運公司";//也可以這樣賦值
sheet.Cells[2, 2] = "船名";
sheet.Cells[2, 3] = "航次";
sheet.Cells[2, 4] = "流向";
sheet.Cells[2, 5] = "裝港";
sheet.Cells[2, 6] = "供貨方";
sheet.Cells[2, 7] = "性質";
sheet.Cells[2, 8] = "煤質";
sheet.Cells[2, 9] = "貿易性質";
sheet.Cells[2, 10] = "煤種";
sheet.Cells[2, 11] = "狀態";
sheet.Cells[2, 12] = "錨地時間";
sheet.Cells[2, 13] = "手續辦理時間";
sheet.Cells[2, 14] = "靠泊時間";
sheet.Cells[2, 15] = "載重";
sheet.Cells[2, 16] = "離港時間";
sheet.Cells[2, 17] = "在港時間";
sheet.Cells[2, 18] = "錨地時間";
sheet.Cells[2, 19] = "靠御時間";
sheet.Cells[2, 20] = "離港時間";
sheet.Cells[2, 21] = "御港時間";
sheet.Cells[2, 22] = "預估滯期費";
sheet.Cells[2, 23] = "卸港效率";
給第一列賦值
//這個 列的Index無所謂 只要在 想要合並的單元格列(如 合並 12-22 列) Index的 范圍內就行
sheet.Cells[1, 12] = "裝港";
sheet.Cells[1, 22] = "卸港";
合並單元格 (表頭); 這時要用到 Range 可以理解為 域 (區域) 我們設置樣式 是都是設置的Range

//合並 單元格 設置表頭
sheet.get_Range("A1", "A2").Merge(sheet.get_Range("A1", "A2").MergeCells);
sheet.get_Range("B1", "B2").Merge(sheet.get_Range("B1", "B2").MergeCells);
sheet.get_Range("C1", "C2").Merge(sheet.get_Range("C1", "C2").MergeCells);
sheet.get_Range("D1", "D2").Merge(sheet.get_Range("D1", "D2").MergeCells);
sheet.get_Range("E1", "E2").Merge(sheet.get_Range("E1", "E2").MergeCells);
sheet.get_Range("F1", "F2").Merge(sheet.get_Range("F1", "F2").MergeCells);
sheet.get_Range("G1", "G2").Merge(sheet.get_Range("G1", "G2").MergeCells);
sheet.get_Range("H1", "H2").Merge(sheet.get_Range("H1", "H2").MergeCells);
sheet.get_Range("I1", "I2").Merge(sheet.get_Range("I1", "I2").MergeCells);
sheet.get_Range("J1", "J2").Merge(sheet.get_Range("J1", "J2").MergeCells);
sheet.get_Range("K1", "K2").Merge(sheet.get_Range("K1", "K2").MergeCells);
sheet.get_Range("L1", "Q1").Merge(sheet.get_Range("L1", "Q1").MergeCells);
sheet.get_Range("R1", "W1").Merge(sheet.get_Range("R1", "W1").MergeCells);
//得到 Range 范圍 域對象 Range range = sheet.get_Range("A1", "W69"); 從A1到 W69 的區域 A是表頭編號 后面的數組時 列的Index
設置 樣式

//得到 Range 范圍 域對象
Range range = sheet.get_Range("A1", "W69");
//設置 該range內的 樣式 顏色 邊框
Console.WriteLine("該域內有"+range.Rows.Count.ToString ()+"行數據");
//設置Excel表格的 列寬
sheet.get_Range("L1" , "L69" ).ColumnWidth = 30;
sheet.get_Range("P1", "Q69").ColumnWidth = 30;
sheet.get_Range("R1", "U69").ColumnWidth = 30;
//設置 域 Range 的顏色 從 A1到W1
sheet.get_Range("A1", "W1").Interior.ColorIndex = 15;
sheet.get_Range("A2", "W2").Interior.ColorIndex = 15;
//設置 某個域 range 被選中
//sheet.get_Range("A1", "W1").Select();
//sheet.get_Range("A2", "W2").Select();
sheet.get_Range("C3", "W3").Select();
//左右 設置 選中域內的 Excel單元格從C 到W 是活動的 前面的A B 為固定的
//但是 上下 方向 表頭(這里表頭合並兩行 )沒有固定 選C3 到W3(表示從C的第三行開始 為 活動 的 上面兩行為固定的)
app.ActiveWindow.FreezePanes = true;
//設置 某個域range內 單元格里的字體顏色
sheet.get_Range("A1", "W2").Font.Color = -16744448;//(搜索Excel顏色對照表)
sheet.get_Range("A3", "W24").Font.Color = -16776961;
//文字 居中
range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
range.Font.Size = 10;
range.Borders.LineStyle = 1;
//固定 列的原有 格式
//range.EntireColumn.AutoFit();
//設置邊框
range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlMedium, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
range.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight = XlBorderWeight.xlMedium;
range.WrapText = true;
賦值:
完整代碼:

//創建一個Excel運行環境
Application app = new Application();
//
app.Visible = false;
//創建Excel中的工作薄
Workbook wb = (Workbook)app.Workbooks.Add(Missing.Value);
//創建Excel工作薄中的 頁 sheet
Worksheet sheet =(Worksheet ) wb.ActiveSheet;
sheet.Cells[2, 1] = "航運公司";//也可以這樣賦值
sheet.Cells[2, 2] = "船名";
sheet.Cells[2, 3] = "航次";
sheet.Cells[2, 4] = "流向";
sheet.Cells[2, 5] = "裝港";
sheet.Cells[2, 6] = "供貨方";
sheet.Cells[2, 7] = "性質";
sheet.Cells[2, 8] = "煤質";
sheet.Cells[2, 9] = "貿易性質";
sheet.Cells[2, 10] = "煤種";
sheet.Cells[2, 11] = "狀態";
sheet.Cells[2, 12] = "錨地時間";
sheet.Cells[2, 13] = "手續辦理時間";
sheet.Cells[2, 14] = "靠泊時間";
sheet.Cells[2, 15] = "載重";
sheet.Cells[2, 16] = "離港時間";
sheet.Cells[2, 17] = "在港時間";
sheet.Cells[2, 18] = "錨地時間";
sheet.Cells[2, 19] = "靠御時間";
sheet.Cells[2, 20] = "離港時間";
sheet.Cells[2, 21] = "御港時間";
sheet.Cells[2, 22] = "預估滯期費";
sheet.Cells[2, 23] = "卸港效率";
//這個 列的Index無所謂 只要在 想要合並的單元格列(如 合並 12-22 列) Index的 范圍內就行
sheet.Cells[1, 12] = "裝港";
sheet.Cells[1, 22] = "卸港";
//合並 單元格 設置表頭
sheet.get_Range("A1", "A2").Merge(sheet.get_Range("A1", "A2").MergeCells);
sheet.get_Range("B1", "B2").Merge(sheet.get_Range("B1", "B2").MergeCells);
sheet.get_Range("C1", "C2").Merge(sheet.get_Range("C1", "C2").MergeCells);
sheet.get_Range("D1", "D2").Merge(sheet.get_Range("D1", "D2").MergeCells);
sheet.get_Range("E1", "E2").Merge(sheet.get_Range("E1", "E2").MergeCells);
sheet.get_Range("F1", "F2").Merge(sheet.get_Range("F1", "F2").MergeCells);
sheet.get_Range("G1", "G2").Merge(sheet.get_Range("G1", "G2").MergeCells);
sheet.get_Range("H1", "H2").Merge(sheet.get_Range("H1", "H2").MergeCells);
sheet.get_Range("I1", "I2").Merge(sheet.get_Range("I1", "I2").MergeCells);
sheet.get_Range("J1", "J2").Merge(sheet.get_Range("J1", "J2").MergeCells);
sheet.get_Range("K1", "K2").Merge(sheet.get_Range("K1", "K2").MergeCells);
sheet.get_Range("L1", "Q1").Merge(sheet.get_Range("L1", "Q1").MergeCells);
sheet.get_Range("R1", "W1").Merge(sheet.get_Range("R1", "W1").MergeCells);
//得到 Range 范圍 域對象
Range range = sheet.get_Range("A1", "W69");
//設置 該range內的 樣式 顏色 邊框
Console.WriteLine("該域內有"+range.Rows.Count.ToString ()+"行數據");
//設置Excel表格的 列寬
sheet.get_Range("L1" , "L69" ).ColumnWidth = 30;
sheet.get_Range("P1", "Q69").ColumnWidth = 30;
sheet.get_Range("R1", "U69").ColumnWidth = 30;
//設置 域 Range 的顏色 從 A1到W1
sheet.get_Range("A1", "W1").Interior.ColorIndex = 15;
sheet.get_Range("A2", "W2").Interior.ColorIndex = 15;
//設置 某個域 range 被選中
//sheet.get_Range("A1", "W1").Select();
//sheet.get_Range("A2", "W2").Select();
sheet.get_Range("C3", "W3").Select();
//左右 設置 選中域內的 Excel單元格從C 到W 是活動的 前面的A B 為固定的
//但是 上下 方向 表頭(這里表頭合並兩行 )沒有固定 選C3 到W3(表示從C的第三行開始 為 活動 的 上面兩行為固定的)
app.ActiveWindow.FreezePanes = true;
//設置 某個域range內 單元格里的字體顏色
sheet.get_Range("A1", "W2").Font.Color = -16744448;//(搜索Excel顏色對照表)
sheet.get_Range("A3", "W24").Font.Color = -16776961;
//文字 居中
range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
range.Font.Size = 10;
range.Borders.LineStyle = 1;
//固定 列的原有 格式
//range.EntireColumn.AutoFit();
//設置邊框
range.BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlMedium, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
range.Borders.get_Item(XlBordersIndex.xlEdgeBottom).Weight = XlBorderWeight.xlMedium;
range.WrapText = true;
//賦值
for (int i = 0; i <22; i++)
{
sheet.Cells[i + 3, 1] = i.ToString();
sheet.Cells[i + 3, 2] = i.ToString();
sheet.Cells[i + 3, 3] = i.ToString();
sheet.Cells[i + 3, 4] = i.ToString();
sheet.Cells[i + 3, 5] = i.ToString();
sheet.Cells[i + 3, 6] = i.ToString();
sheet.Cells[i + 3, 7] = i.ToString();
sheet.Cells[i + 3, 8] = i.ToString();
sheet.Cells[i + 3, 9] = i.ToString();
sheet.Cells[i + 3, 10] = i.ToString();
sheet.Cells[i + 3, 11] = i.ToString();
}
wb.Saved = true;
//保存工作薄
app.ActiveWorkbook.SaveCopyAs(@"C:\Users\ITCA\Desktop\新建Excel.xlsx");
finally
{
#region 釋放內存
wb.Close(null, null, null);
app.Workbooks.Close();
app.Quit();
Marshal.ReleaseComObject((object)app);
Marshal.ReleaseComObject((object)wb);
Marshal.ReleaseComObject((object)sheet);
GC.Collect();
#endregion
}