通过API设置单元格格式的方法
数字(Range.NumberFormatlocal 属性)
常规:Range.NumberFormatlocal = "G/通用格式"
数值:Range.NumberFormatlocal = "0.000_ " --保留小数位数为3
Range.NumberFormatlocal = "#,##0.000 " --保留小数位数为3,并使用千位分隔符
货币:Range.NumberFormatlocal = "$#,##0.000"
百分比:Range.NumberFormatlocal = "0.000%"
分数:Range.NumberFormatlocal = "# ?/?"
科学计数:Range.NumberFormatlocal = "0.00E+00"
文本:Range.NumberFormatlocal = "@"
特殊:Range.NumberFormatlocal = "000000"---邮政编码
Range.NumberFormatlocal = "[DBNum1]G/通用格式"---中文小写数字
Range.NumberFormatlocal = "[DBNum2]G/通用格式"---中文大写数字
Range.NumberFormatlocal = "[DBNum2][$RMB]G/通用格式"---人民币大写
对齐
水平对齐:Range.HorizontalAlignment = etHAlignCenter ---居中
垂直对齐:Range.VerticalAlignment = etVAlignCenter---居中
是否自动换行:Range.WrapText = True
是否缩小字体填充:Range.ShrinkToFit = True
是否合并单元格:Range.MergeCells = False
文字竖排:Range.Orientation = etVertical
文字倾斜度数:Range.Orientation = 45 -----倾斜45度
字体(Font对象)
字体名称:Font.Name = "华文行楷"
字形:Font.FontStyle = "常规"
字号:Font.Size = "10"
下划线:Font.Strikethrough = True; Font.Underline = etUnderlineStyleDouble ---双下划线
上标:Font.Superscript = True
下标:Font.SubScript = True
删除线:Font.OutlineFont = True
边框(Borders对象)
Borders.Item(etEdgeTop):上边框
Borders.Item(etEdgeLeft):左边框
Borders.Item(etEdgeRight):右边框
Borders.Item(etEdgeBottom):下边框
Borders.Item(etDiagonalDown):左上--右下边框
Borders.Item(etDiagonalUp):左下--右上边框
Border.LineStyle = etContinuous 线条样式
一、遍历单元格范围的行列值
/* https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.range?view=excel-pia
* Range.Rows 属性 返回 Range 一个对象,该对象代表指定范围中的行。
* 该属性在应用于是多个选定区域的 Range 对象时,只从该区域中第一个子区域内返回行。
foreach (Excel.Range row in range.Rows)
/* Range.Columns 属性 返回 Range 一个对象,该对象代表指定范围中的列
* 此属性在应用于一个是多重选定区域的 Range 对象时,会只从该区域的第一个子区域中返回列。
* 例如,如果 Range 对象有两个子区域 A1:B2 和 C3:D4,则该属性 Count 返回 2,而不是 4。
* 若要对可能包含多区域选定区域的区域使用此属性,请测试对象的属性以确定该区域是否包含多个 Count Areas 区域。
* 如果包含,则对该区域中的每个子区域进行循环。
foreach (Excel.Range column in row.Columns)
if (column.Value2 != null)
System.Diagnostics.Debug.WriteLine((string)column.Value2);
System.Diagnostics.Debug.WriteLine("---------------------------遍历方法二");
foreach (Excel.Range column in row)
// Range.Cells 属性 返回一个 Range 对象,它表示指定区域中的单元格。
foreach (Excel.Range item in column.Cells)//行区域,相当于遍历列
if (item.Value2 != null)
System.Diagnostics.Debug.WriteLine((string)(item.Value2));
System.Diagnostics.Debug.WriteLine("---------------------------遍历方法三");
foreach (Excel.Range column in row.Cells)
//错误示例,item.Value2为整行的值
foreach (Excel.Range item in column)
if (item.Value2 != null)
System.Diagnostics.Debug.WriteLine((string)(item.Value2));
二、单元格范围排序
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range range = sheet.Range["A2:X203"];
/* https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.range.sort?view=excel-pia
* Sort() 如果指定区域只包含一个单元格,则对数据透视表、区域或活动区域进行排序
* 参数:
* Key1 可选 对象。 第一个排序字段,作为 (数据透视表字段或区域名称) 或对象 Range ("Dept"或 Cells (1,1) ,例如)
* Order1 可选 XlSortOrder 。 中指定的字段或范围的排序顺序 Key1 。
* 可以是以下 XlSortOrder 常量之一:xlDescending。 按 Key1 降序排序。xlAscending default 。 按 Key1 升序排序
* Key2 可选 对象。 第二个排序字段,如果省略该参数,则没有第二个排序,对数据透视表报表进行排序时不能使用
* Type 可选 对象。 指定要排序的元素。 仅在对数据透视表排序时才使用该参数
* Order2 可选 XlSortOrder 。 中指定的字段或范围的排序顺序Key2。对数据透视表进行排序时,不能使用该参数
* Header 可选 XlYesNoGuess 。 指定第一行是否包含标题。 对数据透视表进行排序时,不能使用该参数
* OrderCustom 可选 对象。 该参数是从 1 开始的整数,指定了在自定义排序次序列表中的偏移量。 如果省略 OrderCustom ,则使用正常排序
* MatchCase 可选 对象。 如果为 True,则进行区分大小写的排序;如果为 False,则排序时不区分大小写。 对数据透视表进行排序时,不能使用该参数
* Orientation 可选 XlSortOrientation 。 排序方向按行或按列
* SortMethod 可选 XlSortMethod 。 排序类型,中文排序方式
* DataOption1 可选 XlSortDataOption 。 指定如何对 中的文本进行排序 Key 1
* 可以是以下常量之一xlSortTextAsNumbers。 将文本视为排序的数字数据。xlSortNormal default 。 分别对数字和文本数据进行排序
* DataOption2 可选 XlSortDataOption 。 指定如何对 中的文本进行排序 Key 2
range.Sort(sheet.Range["T2"],Excel.XlSortOrder.xlAscending,
Type.Missing, Type.Missing, Excel.XlSortOrder.xlAscending,
Type.Missing, Excel.XlSortOrder.xlAscending,
Excel.XlYesNoGuess.xlYes,
Type.Missing,
Type.Missing,
Excel.XlSortOrientation.xlSortColumns);
/* https://docs.microsoft.com/zh-cn/dotnet/api/microsoft.office.interop.excel.sort?view=excel-pia
* Sort 接口 代表数据区域的排序方式。
* Header 指定第一行是否包含标题信息。 读/写
* MatchCase 如果设置为 True,则执行区分大小写的排序,如果设置为 False,则执行不区分大小写的排序。可读/写。
* Orientation 指定排序方向。 读/写
* Parent 返回指定对象的父对象。只读。
* Rng 返回要执行排序的值的区域。只读。
* SortFields 可用来在工作簿、列表和自动筛选上存储排序状态。只读 SortFields 类型
* SortMethod 指定中文排序方法。 读/写。
Excel.Sort sort = sheet.AutoFilter.Sort;
sort.SortFields.Clear();
sort.SortFields.Add(sheet.Range["T2"], Excel.XlSortOrder.xlAscending);
sort.Header = Excel.XlYesNoGuess.xlYes;//是否包含标题行
sort.MatchCase = false;//是否区分大小写
sort.SortMethod = Excel.XlSortMethod.xlPinYin;//中文按拼音排序
sort.Orientation = Excel.XlSortOrientation.xlSortColumns;//排序列
sort.Apply();// 根据当前应用的排序状态对区域进行排序
/* AutoFilter 使用“自动筛选”筛选一个列表
* 参数:
* Field 可选 对象。 相对于作为筛选基准字段(从列表左侧开始,最左侧的字段为第一个字段)的字段的整型偏移量。
* Criteria1 可选 对象。 条件(字符串;例如,“101”)。 使用"="查找空白字段,或使用"" < > 查找非空字段。 如果省略此参数,则条件为 All。
* Operator 过滤内容
range.AutoFilter(4, "3-12", Excel.XlAutoFilterOperator.xlFilterValues);