欢迎来到陆季疵的博客

人生莫作远行客,远行莫戍黄沙碛。黄沙碛下八月时, 霜风裂肤百草衰。尘沙晴天迷道路,河水悠悠向东去。 胡笳听彻双泪流,羁魂惨惨生边愁。原头猎火夜相向, 马蹄蹴蹋层冰上。不似京华侠少年,清歌妙舞落花前。

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);

 

posted @ 2021-09-14 11:41  陆季疵  阅读(835)  评论(0编辑  收藏  举报
//《!--看板娘--> //https://www.cnblogs.com/ZTianming/p/14618913.html