一、需求
第一列正常显示 第二列第三列默认隐藏 点击第二列或者第三列的单元格该单元格显示 再次点击后该单元格隐藏 第二列和第三列的其他单元格默认隐藏
二、代码
javascript
/**
* WPS JSA 宏代码
* 功能:
* 1. 工作表激活时,默认隐藏第2列(B)和第3列(C)的所有单元格内容。
* 2. 点击第2列或第3列的任意单元格,切换该单元格的显示/隐藏状态。
* - 如果当前隐藏,则显示。
* - 如果当前显示,则再次隐藏。
* 3. 第1列(A)保持正常显示,不受影响。
*
* 注意:此代码应放置在工作表对象(如Sheet1)的代码窗口中,以响应事件。
* 如果放在普通模块,需要手动绑定事件或使用其他方式触发,但工作表对象是最佳实践。
*/
// 全局变量,用于记录最后操作的单元格,可选功能:点击新单元格时自动隐藏旧单元格
// 根据需求"再次点击后该单元格隐藏",这里采用仅切换当前点击单元格状态的逻辑,
// 若需"互斥显示"(即同时只显示一个),可启用下面的互斥逻辑。
let lastVisibleCell = null; // 记录当前显示的单元格,用于互斥逻辑
function Worksheet_Activate() {
// 当工作表被激活时,初始化隐藏B列和C列
hideColumnContent(2);
hideColumnContent(3);
}
function Worksheet_SelectionChange(Target) {
// 当选择区域改变时触发
// 1. 确保只选中了一个单元格
if (Target.Count > 1) return;
let col = Target.Column;
// 2. 检查是否在第2列或第3列
if (col !== 2 && col !== 3) return;
// 3. 切换当前单元格的显示/隐藏状态
toggleCellVisibility(Target);
// --- 可选:互斥逻辑 ---
// 如果希望同一时间B/C列只有一个单元格显示,取消以下注释
/*
if (lastVisibleCell && lastVisibleCell.Address !== Target.Address) {
// 隐藏上一个显示的单元格
setCellHidden(lastVisibleCell);
}
// 如果当前单元格变为显示状态,则更新记录
if (Target.NumberFormatLocal !== ";;;") {
lastVisibleCell = Target;
} else {
// 如果当前单元格被隐藏,且它是之前记录的,则清空记录
if (lastVisibleCell && lastVisibleCell.Address === Target.Address) {
lastVisibleCell = null;
}
}
*/
// ---------------------
}
/**
* 隐藏指定列的所有单元格内容
* @param {number} colIndex - 列索引 (1-based)
*/
function hideColumnContent(colIndex) {
let sheet = Application.ActiveSheet;
// 获取整列
let col = sheet.Columns.Item(colIndex);
// 设置自定义格式为 ;;; (视觉隐藏)
col.NumberFormatLocal = ";;;";
}
/**
* 切换单个单元格的显示/隐藏状态
* @param {Range} cell - 目标单元格对象
*/
function toggleCellVisibility(cell) {
// 检查当前格式是否为隐藏格式
if (cell.NumberFormatLocal === ";;;") {
// 如果是隐藏的,则显示(恢复为常规格式)
cell.NumberFormatLocal = "General";
} else {
// 如果是显示的,则隐藏
cell.NumberFormatLocal = ";;;";
}
}
/**
* 强制隐藏单个单元格
* @param {Range} cell - 目标单元格对象
*/
function setCellHidden(cell) {
cell.NumberFormatLocal = ";;;";
}
三、运行
WPS->工具->WPS宏编辑器->插入代码->保存
手机和pc端通用,双击显示,单击其他单元格隐藏。