Cell_核选框

Excel核选框操作指南

添加一个核选框(核选为多选):

右键---->单元格格式---->单元类型---->核选框---->参数设置,然后在核选钮正文的位置输入内容

SetCheckCell:向单元格中添加核选扭控件。

SetCheckCell函数的定义形式为:

void SetCheckCell(long col, long row, long sheet, LPCTSTR text, long option)

第一个参数:col:列号;第二个参数:row:行号;第三个参数:sheet:页号;第四个参数:text:核选扭上的文本内容;第五个参数:option:为2是显示3D形状。

 

GetCheckCellString:获得核选钮单元格中核选钮上的文本内容。

GetCheckCellString函数的定义形式为:

GetCheckCellString(col As Long, row As Long, sheet As Long) As String

第一个参数:col:列号;第二个参数:row:行号;第三个参数:sheet:页号;

 

GetCellDouble:得到核选框的勾选状态。

GetCellDouble函数的定义形式为:

GetCellDouble(col As Long, row As Long, sheet As Long) As Double

第一个参数:col:列号;第二个参数:row:行号;第三个参数:sheet:页号;

返回值为Double型,1为勾选,0为未勾选

转载于:https://my.oschina.net/u/2930533/blog/888337

这段代码的功能是从`df_cell_volt`数据框中计算每行最小值、次小值,并进一步求出两者的差值。我们可以对代码进行一些优化以提高性能和可读性。 ### 原始代码分析 ```python # 计算每行最小值 df_cell_volt['min'] = df_cell_volt.iloc[:, 0:cell_num].min(axis=1) # 使用 apply 和 nsmallest 找到第二小的数 df_cell_volt['min2'] = df_cell_volt.iloc[:, 0:cell_num].apply(lambda row: row.nsmallest(2).iloc[-1], axis=1) # 求 min2 和 min 的差异 df_cell_volt['volt_diff'] = df_cell_volt['min2'] - df_cell_volt['min'] ``` #### 存在的问题: 1. **效率低**:使用 `apply()` 函数结合 `nsmallest()` 可能会较慢,因为每次都需要遍历整行并排序。 2. **冗余操作**:两次访问切片部分的数据可能会增加内存消耗。 --- ### 优化后的代码 通过 NumPy 提高性能: ```python import numpy as np # 获取需要处理的部分矩阵 (只取 cell_num 列) data_matrix = df_cell_volt.iloc[:, 0:cell_num].to_numpy() # 计算每个样本的最小值和次小值 def find_min_and_second_min(matrix): sorted_indices = np.argpartition(matrix, 1, axis=1) # 部分排序找到前两个索引 first_col_idx = sorted_indices[:, 0] second_col_idx = sorted_indices[np.arange(len(matrix)), [i != j for i, j in enumerate(first_col_idx)]] min_values = matrix[np.arange(len(matrix)), first_col_idx] # 最小值 min2_values = matrix[np.arange(len(matrix)), second_col_idx.ravel()] # 第二小值 return min_values, min2_values min_vals, min2_vals = find_min_and_second_min(data_matrix) # 将结果赋值回 DataFrame df_cell_volt['min'] = min_vals df_cell_volt['min2'] = min2_vals df_cell_volt['volt_diff'] = min2_vals - min_vals ``` --- ### 优化点解释 1. **避免逐行迭代 (`apply`)** - 直接利用 NumPy 矩阵运算代替 Pandas 行迭代,提升速度。 2. **减少不必要的列选择** - 先将所需列转换为 NumPy 数组以便高效处理,减少了多次调用 `.iloc[]` 的开销。 3. **快速获取第 k 小元素** - 使用了 `np.argpartition` 来替代完全排序的方式,从而节省时间复杂度从 O(n log n) 下降到接近线性的 O(n). 4. **直接存储中间变量** - 这样可以复用已经生成的结果而不需要再次计算。 --- ### 性能对比 对于较大的数据集(如上万行),上述基于 Numpy 的解决方案通常比原始方法快几个数量级。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值