# 表格数据操作 【本功能为预览状态,欢迎反馈问题】
对某个表格变量([DataTable对象](https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable?view=netframework-4.7.2))进行读写或更新。
关于表格变量的相关说明,请参考文档《[表格变量类型](https://getquicker.net/KC/Help/Doc/tablevar)》。 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640591171884-4ee40568-4ee4-41f0-9f53-47dbc1f908c0.png#averageHue=%23fbfbfb&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=472&id=ue68aa3d4&originHeight=944&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=80106&status=error&style=none&taskId=u1574bca9-6012-4381-9f80-f186efac687&title=&width=628.5) # 通用输入输出参数 输入参数:
【表格变量】选择要操作的目标表格变量。
【操作类型】对表格变量进行的操作种类。
【失败后停止】遇到异常情况时停止继续执行后续步骤。 输出参数:
【是否成功】操作是否没有遇到异常。 # 操作类型 ## 获取信息 获取表格变量的数据信息。 输出参数: - 行列表:表格的[Rows](https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable.rows?view=netframework-4.7.2#System_Data_DataTable_Rows)数据。需输出到“对象”类型变量中。 - 列的列表:表格的[Columns](https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable.columns?view=netframework-4.7.2)数据。需输出到“对象”类型变量中。 - 行数:表格数据的总行数。 ## 添加行 向表格中添加一行数据。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640593707718-d92b7172-126d-44e0-90ab-b324f2ba1088.png#averageHue=%23fcfcfb&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=502&id=ud7c7c68c&originHeight=1004&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=71107&status=error&style=none&taskId=u987220ed-dec2-4e39-af26-89e7b172a49&title=&width=628.5)
【行数据】
新添加行的各列数据。为词典类型,每一项的Key为列名,Value为值。
注:不需要为自动生成值的列提供数据(如自增长的列等)。 ## 更新行 更新符合条件的行的某些列的内容。1.42.38+支持。
![image.png](https://cdn.nlark.com/yuque/0/2024/png/272392/1715672785231-8ca777cf-3fdf-4c9c-a122-c8bb4ea06bc2.png#averageHue=%23fcfcfc&clientId=ud4bae78c-807d-4&from=paste&height=791&id=ucfab37f8&originHeight=1186&originWidth=1275&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=102460&status=done&style=none&taskId=ue01940cd-0f4b-4863-9441-003f7c00c5d&title=&width=850)
**输入**
【行数据】要更新的列和对应值的词典。可以同时更新多列。
【筛选表达式】用于确定更新哪些行。
**输出**
【行数】更新的行数。 ## 查看或编辑数据 显示一个窗口,可用于查看或修改表格变量中的数据。
通过【只读模式】参数可以控制是否允许修改表格变量中的数据。 ### 只读模式 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640597863774-d76fb44b-d1b6-4287-a128-0b22dc928779.png#averageHue=%23fafaf9&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=221&id=ud560cfee&originHeight=441&originWidth=777&originalType=binary&ratio=1&rotation=0&showTitle=false&size=28516&status=error&style=none&taskId=uaecd9448-d05c-4e6b-b9f7-bf9feeb00fd&title=&width=388.5)
如果需要复制内容,可以鼠标拖动选中一个或多个单元格后Ctrl+C或使用右键菜单。 ### 编辑模式 ![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640598130357-0070355e-dc0f-4f79-b6b5-8d40812dd6cf.png#averageHue=%23fbfafa&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=222&id=u01228478&originHeight=444&originWidth=1182&originalType=binary&ratio=1&rotation=0&showTitle=false&size=43012&status=error&style=none&taskId=u77b43b81-0e62-409b-b5c4-15a5a42e5ac&title=&width=591)
**注:需要事先在表格变量里定义每列的编辑方式。** 点击“添加行”按钮,可以打开表单窗口添加新的行。
双击一行中的单元格或点击后面的“编辑”按钮,可以编辑该行内容。
点击“删除”按钮可以删除一行。
点击“还原”可以将数据恢复到打开窗口时的状态。 ## 查询或筛选行(Select) 使用[DataTable对象的Select()](https://docs.microsoft.com/en-us/dotnet/api/system.data.datatable.select?view=netframework-4.7.2)方法获取符合条件的行。 【筛选表达式】查询条件,语法请参考《[DataView RowFilter Syntax](https://www.csharp-examples.net/dataview-rowfilter/)》。
示例: - `Id = 10` `Id > 20` `Id in (1,2,3)` - `Name = '张三'` `Name <> '李四'` `Name in ('张三','李四','王五')` - `Date = #2022-12-27#` - `Name LIKE '*str*'` (通配符*可以在最前面或/和最后面,不能在中间) - 布尔操作符支持`AND``OR``NOT` 如:`NOT City = 'Tokyo' AND NOT City = 'Paris'` - 支持使用`CONVERT`方法在比较的时候转换数据类型,[参考来源](https://stackoverflow.com/a/56853222/3335415)。例如:动态加载的表格,数字类型的列可能会被当做文本类型,此时如果要按数字比较,可以通过这样的方式转换:`**CONVERT(序号, System.Int32) > 3**` 【排序】可选。设定查询结果的排序方式,例如: - `Birth DESC`(按Birth列从大到小倒序排序) - `Id` (按ID从小到大正序排序) 输出:
【行数】符合筛选条件的结果行数。
【行列表】符合条件的行列表(类型为DataRow[]),可通过“每个”模块循环访问各行信息。
【第一行】第一条符合条件的行。 ## 清除所有行 清除表格中的所有数据。 ## 删除符合条件的行 删掉匹配指定筛选条件的行。
![image.png](https://cdn.nlark.com/yuque/0/2024/png/272392/1715675016044-7cda1acd-adbd-4813-b12b-a34ba4bfe5da.png#averageHue=%23fbfbfb&clientId=ud4bae78c-807d-4&from=paste&height=319&id=ude8cd563&originHeight=478&originWidth=1275&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=34647&status=done&style=none&taskId=u7d5b1494-6d2a-4392-9798-385c9f4f020&title=&width=850) ## 删除列 从表格删除掉指定的列。
![image.png](https://cdn.nlark.com/yuque/0/2024/png/272392/1715675078913-8e2426be-d833-43af-a538-688b84979c3d.png#averageHue=%23fafafa&clientId=ud4bae78c-807d-4&from=paste&height=319&id=uf21e6067&originHeight=479&originWidth=857&originalType=binary&ratio=1.5&rotation=0&showTitle=false&size=28906&status=done&style=none&taskId=u867effba-cc43-4a62-8f9f-6ffe210c76e&title=&width=571.3333333333334) ## 从CSV文本加载数据 从csv格式(逗号分隔)的文本加载数据到表格变量。可以在前面使用“[读取文件](https://getquicker.net/KC/Help/Doc/readFile)”模块将文件内如读取到文本变量中(csv文件在简体中文系统中通常使用GB2312编码保存),再在本模块中将变量输入到“文本数据”参数。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640609116675-c20faba3-3794-4967-9822-42431b8ea1c1.png#averageHue=%23fcfcfc&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=537&id=u75155b9e&originHeight=1074&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=73010&status=error&style=none&taskId=u26978f67-da2d-4461-8c1c-bc3ad648c96&title=&width=628.5)
【文本数据】csv文本内容。第一行应该为标题行,内容为各列的列名。
【清除已有的行】是否清除已有的数据。 ## 从JSON文本加载数据 从JSON数组文本中加载数据。
其它参数同上。
根据json数据内容的不同,分两种情况: - Json数组:数组中对象的key作为表的列名,对象的值作为作为每一行的对应key列的数据。如:` [{"name":"张三","age":20,'City':'BeiJing'},{"name":"李四","age":21,'City':'ShangHai'}]`,得到的表格为:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/272392/1664954079949-9b727685-db84-4992-abfe-9def220a532b.png#averageHue=%23f1f1f1&clientId=u622f53ab-2538-4&from=paste&height=86&id=u6e776505&originHeight=142&originWidth=286&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5339&status=done&style=none&taskId=u67ed0177-2645-49d2-ae4b-70c70ace8a3&title=&width=173.33332331493705) - Json对象(1.35.38+版本):自动生成Key和Value两列,存储json对象每个属性的名称和值。如:` {"name":"张三","age":20,'City':'BeiJing'} `,得到的表格内容为:
![image.png](https://cdn.nlark.com/yuque/0/2022/png/272392/1664953977797-bb2cddf1-6d63-49a9-a61a-b4c7788f6449.png#averageHue=%23f4f4f4&clientId=u622f53ab-2538-4&from=paste&height=113&id=u553745a8&originHeight=187&originWidth=236&originalType=binary&ratio=1&rotation=0&showTitle=false&size=5312&status=done&style=none&taskId=u76978ce4-dba5-4c00-a9f8-8fda22dc96a&title=&width=143.03029476337463) ## 从Excel工作表加载数据 从Excel工作表加载数据。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640609589289-85f42b8d-2f34-43d0-80d4-e61a861ac11e.png#averageHue=%23fcfbfb&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=513&id=ufc7c43fe&originHeight=1025&originWidth=1257&originalType=binary&ratio=1&rotation=0&showTitle=false&size=75693&status=error&style=none&taskId=u570185a7-6f0b-4594-814d-55dd49ff57a&title=&width=628.5)
要读取的Excel工作表中应该有规范的二维表格数据。
![image.png](https://cdn.nlark.com/yuque/0/2021/png/272392/1640612278253-82c03846-abd8-45cb-91c5-be37e9016579.png#averageHue=%23f7f7f6&clientId=u08577b4c-f837-4&errorMessage=unknown%20error&from=paste&height=139&id=u4d6b6bb3&originHeight=278&originWidth=576&originalType=binary&ratio=1&rotation=0&showTitle=false&size=19055&status=error&style=none&taskId=u6cbe3a1e-ae89-4ee6-bd3b-df6b3d509fa&title=&width=288)
【Excel文件路径】Excel文件的完整路径。此文件当前不能被锁定(如在Excel中打开)。
【Excel工作表名】工作表名称。留空时读取第一个工作表。
【标题行号】列名所在行的行号(从1开始的数字,当前面有表头之类的内容时,会大于1) 注:如果遇到错误提示“Wrong Local header signature: 0xE011CFD0”说明您的excel文件后缀名和实际格式不匹配。xslx和xls是两种excel版本,不能混用。 ## 导出文本数据 将表格变量内容导出为文本格式(CSV或Json)。 ## 导出Excel文件 将表格内容输出到一个新建的Excel文档中。 【Excel文件路径】文件的保存路径。
【Excel工作表名】工作表名,留空时为“Sheet1”。 # 更新说明 - 20240227 增加查询筛选时转换数据类型的说明。 - 20240514 增加更新行、删除行、清空表格、删除列操作类型的说明。