跳到主要内容

Excel区域操作

对已打开 Excel 里的某个区域赋值、设格式、调用方法或读取信息。通过 Microsoft.Office.Interop,本机需要安装 Excel。「区域」对应 Range。只读写文件、不启动 Excel 请用 Excel文件读写

当前模块定义

sys:excelRange第三方软件交互Action
标准模块
输入 13 · 输出 13 · 枚举 2

输入参数

  • 区域rangeObject可选

    可以输入区域变量、留空(表示当前选择区域)、used(表示当前工作表的使用区域)或区域范围如A1:E9等,请参考文档。

    填写 输入或变量
  • 限定子范围subRangeEnum必填

    根据需要,将要操作的目标限定为一个子区域

    填写 输入或变量默认 FullArea
    10 个选项整个区域、区域内的第一行、区域内的第一列
    整个区域默认FullArea
    区域内的第一行FirstRow
    区域内的第一列FirstColumn
    区域内最后一行LastRow
    区域内最后一列LastColumn
    活动单元格ActiveCell
    整行(包含区域外EntireRow
    整列(包含区域外EntireColumn
    所有行(区域范围内Rows
    所有列(区域范围内Columns
  • 操作类型operationEnum必填

    操作类型

    填写 固定输入默认 SetValue
    8 个选项设置值、设置公式、设置数值格式
    设置值默认SetValue
    设置公式SetFormula
    设置数值格式SetNumberFormat
    行高,列宽SetCellSize
    设置格式SetStyle
    调用方法CallMethod
    替换内容Replace
    获取区域信息GetRangeInfo
  • 参数valueAny可选

    要设置的内容

    填写 输入或变量条件 仅:SetValue, SetFormula, SetNumberFormat
  • 行高,列宽cellSizeAny可选

    -表示不改变,auto表示自动,数字表示具体值。如auto,auto表示自适应高度和宽度

    填写 输入或变量条件 仅:SetCellSize
  • 格式styleText可选

    要设置的格式内容。每行一个格式设置,请参考模块文档了解详细参数设置。

    填写 输入或变量条件 仅:SetStyle
  • 方法methodsText可选

    要调用的方法,每行一个。格式请参考文档。

    填写 输入或变量条件 仅:CallMethod
  • 查找内容replaceWhatText必填

    要替换的内容

    填写 输入或变量条件 仅:Replace
  • 替换为replaceToText必填

    替换成的内容

    填写 输入或变量条件 仅:Replace
  • 转义"查找内容"replaceEscapeWhatBoolean可选

    替换"查找内容"中的转义字符(\r,\n,\t)

    填写 固定输入条件 仅:Replace默认 false
  • 转义"替换为"replaceEscapeToBoolean可选

    替换"替换为"中的转义字符(\r,\n,\t)

    填写 固定输入条件 仅:Replace默认 true
  • 区分大小写replaceMatchCaseBoolean可选
    填写 固定输入条件 仅:Replace默认 false
  • 失败后停止stopIfFailBoolean可选

    失败后是否停止动作

    填写 固定输入默认 true

输出参数

  • 是否成功isSuccessBoolean

    操作是否成功

  • valueAny

    单元格的值

    条件 仅:GetRangeInfo
  • 文本textText

    单元格的显示文本

    条件 仅:GetRangeInfo
  • 公式formulaText

    单元格的公式值

    条件 仅:GetRangeInfo
  • 数值格式numberFormatText

    单元格数值格式值

    条件 仅:GetRangeInfo
  • 位置引用addressText

    区域位置范围

    条件 仅:GetRangeInfo
  • 列号columnInteger

    左上角单元格从1开始的列数

    条件 仅:GetRangeInfo
  • 行号rowInteger

    左上角单元格从1开始的行数

    条件 仅:GetRangeInfo
  • 列数colNumInteger

    区域包含的列数

    条件 仅:GetRangeInfo
  • 行数rowNumInteger

    区域包含的行数

    条件 仅:GetRangeInfo
  • 格式信息styleText

    单元格的格式

    条件 仅:GetRangeInfo
  • 区域对象rangeObject

    Range对象

    条件 仅:GetRangeInfo
  • 工作表对象sheetObject

    WorkSheet对象

    条件 仅:GetRangeInfo

概述

Excel区域操作

操作Excel的某个区域或单元格
区域
 
可以输入区域变量、留空(表示当前选择区域)、used(表示当前工作表的使用区域)或区域范围如A1:E9等,请参考文档。
限定子范围
根据需要,将要操作的目标限定为一个子区域
操作类型
操作类型
参数
 
要设置的内容
是否成功
-- 选择变量 --
操作是否成功
  • 因权限限制,只能操作由 Quicker 打开的工作簿。用下面的动作打开:
  • 编程改过的内容无法撤销,改之前先保存。
  • 封装面很广,可能和预期不一致,欢迎反馈。熟悉 VBA 会更好用。
用Excel打开
获取选择的文件(夹)/选择特定文件{files}
注释获取选择的文件,如果有的话,依次打开
如果判断条件:{isSuccess}
每个对 {files} 的每项执行
如果判断条件:$= {filePath}.ToLower().EndsWith(".xlsx") || {filePath}.ToLower().Ends...
Excel对象操作工作簿: 打开工作簿
赋值true => {isOpened}
注释如果没有打开任何文件,则创建一个
如果判断条件:$= !{isOpened}
Excel对象操作工作簿: 创建工作簿

参数说明

区域:要操作的范围,任选一种写法:

  • 通过变量或表达式传入Range对象。
  • 不填写内容:表示当前Excel窗口中选定的区域。
  • 填写“used”(不写引号):表示当前Excel窗口工作表中使用的整个区域。内部实现:通过当前工作表的UsedRange属性得到。
  • 填写指定区域范围的文本,如“A1:E9”“A1”等(不写引号)。内部实现:通过当前工作表的Range属性(VBA文档)得到。

限定子范围:把操作目标再收窄到「区域」里的一部分。

  • 整个区域
  • 区域内的第一行 / 区域内的第一列 / 区域内最后一行 / 区域内最后一列
  • 活动单元格:当前有录入焦点的单元格
  • 整行(包含区域外)EntireRow,调行高时用
  • 整列(包含区域外)EntireColumn,调列宽时用
  • 所有行(区域范围内)Rows
  • 所有列(区域范围内)Columns

旧稿里的「指定单元格 / cell:行,列」当前 catalog 已无此项;请改用「区域」写 A1 这类地址,或先「获取区域信息」再操作。

操作类型

  • 设置值:为区域的单元格赋值。内部实现为:为 Region.Value 属性赋值。

  • 设置公式:为区域的单元格设置公式。内部实现为:为 Region.Formula 属性赋值。与在编辑栏(包括等号)中显示时的格式相同,如:“=RAND()*100000”

  • 设置数值格式:设置单元格格式。内部实现为:为Range.NumberFormat 属性赋值。格式代码是在 设置单元格格式对话框中 格式代码选项相同的字符串。

  • 行高,列宽:为区域设置行高列宽,格式为“行高,列宽”

  • 行高可以指定的值:

  • -(横线符号):表示不更改行高;

  • auto:表示自适应行高;

  • std:表示默认行高;

  • 整数数字:以磅为单位的行高值。

  • 列宽可以指定的值:

  • -(横线符号):表示不更改列宽;

  • auto:表示自适应列宽;

  • std:表示默认列宽;

  • 整数数字:指定具体的宽度数值。一个列宽单位等于"常规"样式中一个字符的宽度。对于比例字体,则使用字符 0(零)的宽度。

  • 设置格式:每行一条格式,见下文。对应参数 格式

  • 调用方法:每行一个 Range 方法,见下文。对应参数 方法

  • 替换内容:在区域内查找替换。对应 查找内容替换为转义"查找内容"转义"替换为"区分大小写

  • 获取区域信息:读值 / 公式 / 格式 / 位置 / 对象引用。

失败后停止:失败后是否中止动作。默认开启。

设置值 / 公式 / 数值格式时,内容写在 参数 里。行高列宽写在 行高,列宽 里。

输出

  • 是否成功
  • 仅「获取区域信息」:文本公式数值格式位置引用列号行号列数行数格式信息区域对象工作表对象

替换内容

Excel区域操作

操作Excel的某个区域或单元格
操作类型
操作类型
查找内容
要替换的内容
替换为
替换成的内容

查找内容 / 替换为:要找的文本和换成的文本。

转义"查找内容" / 转义"替换为":把 \r \n \t 当成换行和 Tab。

区分大小写:默认关闭。

设置格式

格式 参数里写,每行一条,形式为 格式名称=格式值

支持的格式如下:

格式名称说明示例
Style风格名
Font.Name字体名称楷体
Font.Size字号24
Font.Bold是否粗体,1表示是,0表示否。下面的所有“是”“否”类型的参数,都是使用这两个数字表示是或否。
Font.Italic是否斜体
Font.Strikethrough是否显示删除线
Font.Superscript是否为上标
Font.Subscript是否为下标
Font.FontStyle字体样式文本
Font.Color字体颜色#FF0000
Font.Underline下划线类型,可用值:
xlUnderlineStyleNone  无
xlUnderlineStyleSingle  单下划线
xlUnderlineStyleDouble  粗双下划线
xlUnderlineStyleSingleAccounting 紧靠在一起的两条细下划线

参考
Interior.Color单元格底色#A0A0A0
ShrinkToFit是否缩小文字适应单元格大小
VerticalAlignment垂直居中,可用值:
xlVAlignBottom 底端对齐
xlVAlignCenter 居中
xlVAlignDistributed 分散对齐
xlVAlignJustify 两端对齐
xlVAlignTop 向上
参考
HorizontalAlignment水平居中,可用值:
xlHAlignCenter 居中
xlHAlignCenterAcrossSelection 跨列居中。
xlHAlignDistributed 分散对齐。
xlHAlignFill 填充。
xlHAlignGeneral 按数据类型对齐。
xlHAlignJustify 两端对齐。
xlHAlignLeft 靠左。
xlHAlignRight 靠右。
Orientation文本角度,是-90到90之间的数字。或者下面的值:
xlDownward 从上到下
xlHorizontal 从左到右
xlUpward 从下到上
xlVertical 从上到下并且在单元格中居中
30
WrapText是否换行
Borders.All所有边框的风格。格式为英文逗号分隔的3个参数值:LineStyle,Weight,Color 

LineStyle可选值:
xlContinuous 实线。
xlDash 虚线。
xlDashDot 点划相间线。
xlDashDotDot 划线后跟两个点。
xlDot 点线。
xlDouble 双线。
xlLineStyleNone 无线。
xlSlantDashDot 倾斜的划线。

Weight(宽度)可选值:
xlHairline 极细
xlThin 细
xlMedium 中等.
xlThick 粗

Color为#RRGGBB格式的颜色。
Borders.BorderIndex单独设置某一类边框的风格。
BorderIndex可能是下面的某一个:
xlDiagonalDown
xlDiagonalUp
xlEdgeBottom
xlEdgeLeft
xlEdgeRight
xlEdgeTop
xlInsideHorizontal
xlInsideVertical

值的格式与Borders.All相同,都是LineStyle,Weight,Color

https://docs.microsoft.com/zh-cn/office/vba/api/excel.xlbordersindex

调用方法

调用Range对象的某一个方法。请参考VBA文档中Range对象的各个方法的说明获取详细信息。

每行一个方法,格式为:“方法名(不需要参数的方法):”或“方法名:参数1,参数2....”

简单方法:

方法说明
Activate:激活当前选中区域中的一个单元格。
被操作对象必须是一个单元格并且在选中范围内。如果要选中一个区域,使用Select:方法
链接
AddComment:备注文字给区域添加备注
ApplyOutlineStyles:对指定区域应用分级显示样式
AutoFill:目标区域,填充类型目标区域:必须包含当前区域。可以使用类似A1:E9的格式。
填充类型:可选值请参考文档https://docs.microsoft.com/en-us/office/vba/api/excel.xlautofilltype
AutoFit:自适应尺寸。必须对“整列”或“整行”区域上执行。
AutoOutline:自动为指定区域创建分级显示。如果区域为单个单元格,Microsoft Excel 将创建整个工作表的分级显示。新分级显示将取代所有的分级显示。
Calculate:计算选择区域的公式
CalculateRowMajorOrder:按单元格的左上角到右下角 (按行主要顺序) 计算指定范围的单元格
Clear:清除整个区域
ClearComments:清除指定区域的所有单元格批注
ClearContents:清理区域中的公式和值
ClearFormats:清除区域的格式设置
ClearHyperlinks:删除指定区域中的所有超链接
ClearNotes:清除指定区域中所有单元格的批注和语音批注
ClearOutline:清除指定区域的分级显示
Copy:
Copy:目标区域
复制区域。如果未指定目标区域,则复制到剪贴板。
Cut:
Cut:目标区域
将对象剪切到剪贴板,或者将其粘贴到指定的目的地。
CopyPicture:Appearance,Format将所选对象作为图片复制到剪贴板
Appearance的可选值:xlScreen(屏幕),xlPrinter(打印)
Format的可选值:xlBitmap(位图),xlPicture(矢量图)
Delete:
Delete:移动方向
删除区域。“移动方向”如何移动单元格来替换删除的单元格。可选值:
xlShiftToLeft或xlShiftUp。
如果省略此参数,Excel 将根据区域的形状确定调整方式。
Dirty:强制下次重新计算发生时计算这个区域
https://docs.microsoft.com/en-us/office/vba/api/excel.range.dirty
FillDown:从指定区域的顶部单元格开始向下填充,直至该区域的底部。 区域中首行单元格的内容和格式将复制到区域中其他行内。
FillLeft:从右向左,从指定范围中的单元格的最右侧的单元格的填充。 内容和格式的单元格或单元格区域的右边的列会复制到区域中的列的其余部分。
FillRight:从指定区域的最左边单元格开始向右填充。 区域中最左列单元格的内容和格式将复制到区域中其他列内。
FillUp:填满从底部单元格或指定范围中的单元格区域的顶部。 内容和格式的单元格或单元格区域的底部行中会复制到区域中的行的其余部分。
FunctionWizard:对指定区域左上角单元格启动“函数向导”
Insert:Shift,CopyOrigin插入单元格或区域。
Shift:可选。可以是下列的**XlInsertShiftDirection** 常量之一: xlShiftToRight或xlShiftDown。 如果省略此参数,Microsoft Excel 将根据区域的形状确定调整方式。
CopyOrigin:可选。副本源;也就是说, 从何处复制插入单元格的格式。 可以是下列的**XlInsertFormatOrigin** 常量之一: xlFormatFromLeftOrAbove (默认值) 或xlFormatFromRightOrBelow。
InsertIndent:缩进量向指定的区域添加缩进量。如果用本方法将缩进量设置为一个小于 0(零)或大于 15 的值,将出错。
Parse:ParseLine,Destination分列区域内的数据并将这些数据分散放置于若干单元格中。 将区域内容分配于多个相邻接的列中;该区域只能包含一列。
ParseLine: 包含方括号的字符串,用以指明在何处拆分单元格。[xxx][xxx]将在目标区域的第一列中插入前三个字符, 并在第二列中插入后面的三个字符。 如果省略此参数, Microsoft Excel 将根据区域左上角单元格的间距推测出拆分列的位置。
Destination: 可选。一个代表用于放置分列数据的目标区域的左上角的 Range 对象。 如果省略该参数,Microsoft Excel 将在原处进行分列。
Justify:调整区域内的文字,使之均衡地填充该区域。如果该区域不足够大,Microsoft Excel 将显示一条消息,告知您文本将超出范围。
Merge:是否每行单独一个从指定的 Range 对象创建合并单元格。合并区域的值在该区域左上角的单元格中指定。参数Across,可选,如果设置为 True,则将指定区域中每一行的单元格合并为一个单独的合并单元格。 默认值为 False。
PrintOut:From, To, Copies, Preview, ActivePrinter, PrintToFile, Collate, PrToFileName打印区域。请参考:https://docs.microsoft.com/en-us/office/vba/api/excel.range.printout
示例:
PrintOut:,,,,,,,
PrintPreview:按对象打印后的外观效果显示对象的预览
RemoveDuplicates:Columns , HeaderColumns:包含重复信息的列的编号数组,以英文分号分隔,如1;2
Header:指定第一行是否包含标题信息。可选值:
xlGuess,由Excel猜测是否有标题,如果有的话,在哪里。xlYes:整个区域不应该被排序。xlNo:默认值,整个区域应该被排序。
RemoveSubtotal:删除区域中的分类汇总
Replace:What,Replacement,MatchCase替换内容(简单版)。查找和替换内容中不能包含逗号。
Select:选择区域。
SetPhonetic:
Show:滚动当前活动窗口中的内容以将指定区域移到视图中。 此区域必须由活动文档中的单个单元格组成。
ShowDependents:绘制从指定区域指向直接从属单元格的追踪箭头。
ShowErrors:显示到源的错误,并返回的范围包含该单元格的单元格绘制通过从属单元格树的追踪箭头。
ShowPrecedents:绘制从指定区域指向直接引用单元格的追踪箭头
Subtotal:GroupByFunctionTotalListReplacePageBreaksSummaryBelowData创建分类汇总
请参考:https://docs.microsoft.com/en-us/office/vba/api/excel.range.subtotal
GroupBy: 分组列编号(1开始)
Function:分类汇总函数 XlConsolidationFunction 枚举
TotalList:使用分号;分隔的列序号。指示被分类汇总的字段。
Replace: True以替换现有的分类汇总。 默认值为 False 
PageBreaks:True以添加分页。 默认值为 False 
SummaryBelowData:放置相对于分类汇总的汇总数据。
- xlSummaryAbove 汇总行在大纲中位于明细数据行的上方。
- xlSummaryBelow 汇总行在大纲中位于明细数据行的下方。
Ungroup:在大纲中的一个区域进行升级 (即,降低其大纲级别)。 指定的范围必须是行或列或行或列的范围。 如果该区域不在数据透视表报告中,此方法将取消范围中包含的项。
UnMerge:将合并区域分解为独立的单元格

注:本文部分方法的说明参考自 https://www.bilibili.com/read/cv2365417/

较为复杂的方法

**AdvancedFilter:**ActionCriteriaRangeCopyToRangeUnique 高级筛选 VBA文档

参数:

Action 操作类型,可选值

  • xlFilterInPlace  将筛选结果显示在原位置
  • xlFilterCopy  将筛选出的数据复制到新位置

CriteriaRange 条件区域,可选

CopyToRange 复制到的区域,可选

Unique  是否筛选唯一值

示例:

*AdvancedFilter:*xlFilterCopy,,G1:G9,true

Consolidate:Sources, Function, TopRow, LeftColumn, CreateLinks 合并计算

Sources:使用英文分号;分隔的多个需要计算的源区域。必须包含将要合并计算的工作表的完整路径。如Sheet1!R1C1:R4C2;Sheet1!R7C7:R10C8

FunctionXlConsolidationFunction的常量值之一:

  • xlAverage 平均.
  • xlCount 计数.
  • xlCountNums 只计数数值。
  • xlDistinctCount 使用非重复计数分析进行计数。
  • xlMax 最大值。
  • xlMin 最小值。
  • xlProduct 乘除.
  • xlStDev 基于样本的标准偏差。
  • xlStDevP 基于全体数据的标准偏差。
  • xlSum 总值.
  • xlUnknown 未指定任何分类汇总函数。
  • xlVar 基于样本的方差。
  • xlVarP 基于全体数据的方差。

*TopRow:可选,*如果为 True,则基于合并计算区域中首行内的列标题对数据进行合并。 如果为 False,则按位置进行合并计算。 默认值为 False。

*LeftColumn:*可选,如果为 True 则基于合并计算区域中左列内的行标题对数据进行合并计算。 如果为 False,则按位置进行合并计算。 默认值为 False

*CreateLinks:可选,*如果为 True,则让合并计算使用工作表链接。 如果为 False,则让合并计算复制数据。 默认值为 False

**ExportAsFixedFormat:**Type,FileName 导出为固定格式。(相对于原版方法参数有所精简)

Type:类型,可选xlTypePDF、xlTypeXPS

FileName:要导出的文件路径。

**PasteSpecial:**PasteOperationSkipBlanksTranspose 特殊格式粘贴

Paste: 要粘贴的类型,可选值为XLPasteType的常量之一:

名称说明
xlPasteAll粘贴全部内容。
xlPasteAllExceptBorders粘贴除边框外的全部内容。
xlPasteAllMergingConditionalFormats将粘贴所有内容,并且将合并条件格式。
xlPasteAllUsingSourceTheme使用源主题粘贴全部内容。
xlPasteColumnWidths粘贴复制的列宽。
xlPasteComments粘贴批注。
xlPasteFormats粘贴复制的源格式。
xlPasteFormulas粘贴公式。
xlPasteFormulasAndNumberFormats粘贴公式和数字格式。
xlPasteValidation粘贴有效性。
xlPasteValues粘贴值。
xlPasteValuesAndNumberFormats粘贴值和数字格式。

Operation:粘贴的操作方式,可选值为XlPasteSpecialOperation 的值之一:

名称说明
xlPasteSpecialOperationAdd复制的数据将被添加到目标单元格中的值。
xlPasteSpecialOperationDivide复制的数据将除以目标单元格中的值。
xlPasteSpecialOperationMultiply复制的数据将与目标单元格中的值相乘。
xlPasteSpecialOperationNone粘贴操作中不执行任何计算。
xlPasteSpecialOperationSubtract复制的数据将从目标单元格中的值中减去。

*SkipBlanks:*如果为 True,则不将剪贴板上区域中的空白单元格粘贴到目标区域中。 默认值为 False。

*Transpose:*如果为 True , 则在粘贴区域时转置行和列。 默认值为 False。

示例:

PasteSpecial:xlPasteValues,xlPasteSpecialOperationAdd,false,false

相关链接

更新于