VSTO--单元格
通过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);