Skip to content

适用于EXCEL文档的简化方法

说明:此节的方法都为了简便用户编程的难度,封装的Excel基本操作的方法。如果需做更细致的操作,请参考技术支持网站(dev.ntko.com)上的文档。

工作表操作

AddSheet

语法

javascript
AddSheet([Before], [After], [Count], [Type])

功能

增加一个电子表。

参数

名称必选/可选数据类型说明
Before可选stringsheet的名称或者索引
After可选stringsheet的名称或者索引
Count可选long插入数量
Type可选string可指定工作表类型

返回值

无返回值。

说明

增加一个电子表。可以根据模板插入新电子表。

工作表类型对照表

说明
-4109图表
-4116对话框工作表
4Excel 版本 4 国际宏工作表
3Excel 版本 4 宏工作表
-4167工作表

示例代码

javascript
// 基本用法 - 添加普通工作表
OCX_OBJ.AddSheet();

// 在指定位置前插入工作表
OCX_OBJ.AddSheet("Sheet2");

// 在指定位置后插入工作表
OCX_OBJ.AddSheet(null, "Sheet1");

// 插入多个工作表
OCX_OBJ.AddSheet(null, null, 3);

// 插入图表工作表
OCX_OBJ.AddSheet(null, null, 1, "-4109");

// 插入对话框工作表
OCX_OBJ.AddSheet(null, null, 1, "-4116");

GetSheetsCount

语法

javascript
GetSheetsCount()

功能

获取当前工作簿的工作表数量。

参数

无参数。

返回值

数值型;工作表数量。

说明

获取当前工作簿的工作表数量。

示例代码

javascript
// 获取工作表数量
var sheetCount = OCX_OBJ.GetSheetsCount();
console.log("当前工作簿有 " + sheetCount + " 个工作表");

// 检查工作表数量
if (OCX_OBJ.GetSheetsCount() < 3) {
    OCX_OBJ.AddSheet(null, null, 3 - OCX_OBJ.GetSheetsCount());
}

单元格操作

GetRangeValue

语法

javascript
GetRangeValue(SheetName, RangeName)

功能

获取指定Excel表格区域的值。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"

返回值

String型字符串。

说明

获取指定Excel表格区域的值。

示例代码

javascript
// 获取单个单元格值
var cellValue = OCX_OBJ.GetRangeValue("Sheet1", "A1");
console.log("A1单元格的值:", cellValue);

// 获取多个单元格值
var values = [];
for (var i = 1; i <= 5; i++) {
    var value = OCX_OBJ.GetRangeValue("Sheet1", "A" + i);
    values.push(value);
}

// 获取范围值
var rangeValue = OCX_OBJ.GetRangeValue("Sheet1", "A1:C3");

SetRangeValue

语法

javascript
SetRangeValue(SheetName, RangeName, varValue)

功能

设置指定Excel表格区域的值。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"
varValue必选string设置的值

返回值

无返回值。

说明

设置指定Excel表格区域的值。

示例代码

javascript
// 设置单个单元格值
OCX_OBJ.SetRangeValue("Sheet1", "A1", "Hello World");

// 设置数字值
OCX_OBJ.SetRangeValue("Sheet1", "B1", "100");

// 设置日期值
OCX_OBJ.SetRangeValue("Sheet1", "C1", "2024-01-01");

// 批量设置值
var data = [
    ["姓名", "年龄", "部门"],
    ["张三", "25", "技术部"],
    ["李四", "30", "销售部"],
    ["王五", "28", "人事部"]
];

for (var i = 0; i < data.length; i++) {
    for (var j = 0; j < data[i].length; j++) {
        var cellAddress = String.fromCharCode(65 + j) + (i + 1);
        OCX_OBJ.SetRangeValue("Sheet1", cellAddress, data[i][j]);
    }
}

GetRangeFormula

语法

javascript
GetRangeFormula(SheetName, RangeName)

功能

获取指定Excel表格区域的公式。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"

返回值

String型字符串。

说明

获取指定Excel表格区域的公式。

示例代码

javascript
// 获取单元格公式
var formula = OCX_OBJ.GetRangeFormula("Sheet1", "A1");
console.log("A1单元格的公式:", formula);

// 检查单元格是否有公式
function hasFormula(sheetName, cellAddress) {
    var formula = OCX_OBJ.GetRangeFormula(sheetName, cellAddress);
    return formula && formula.startsWith("=");
}

// 获取多个单元格的公式
var formulas = [];
for (var i = 1; i <= 10; i++) {
    var formula = OCX_OBJ.GetRangeFormula("Sheet1", "A" + i);
    formulas.push(formula);
}

SetRangeFormula

语法

javascript
SetRangeFormula(SheetName, RangeName, varValue)

功能

设置指定Excel表格区域的公式。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"
varValue必选string设置的公式字符串

返回值

无返回值。

说明

设置指定Excel表格区域的公式。

示例代码

javascript
// 设置基本公式
OCX_OBJ.SetRangeFormula("Sheet1", "A1", "=sum(A1:A3)");

// 设置求和公式
OCX_OBJ.SetRangeFormula("Sheet1", "C1", "=A1+B1");

// 设置平均值公式
OCX_OBJ.SetRangeFormula("Sheet1", "D1", "=AVERAGE(A1:A10)");

// 设置条件公式
OCX_OBJ.SetRangeFormula("Sheet1", "E1", "=IF(A1>100,\"\",\"\")");

// 批量设置公式
function setupFormulas(sheetName) {
    // 设置求和公式
    for (var i = 1; i <= 10; i++) {
        OCX_OBJ.SetRangeFormula(sheetName, "C" + i, "=A" + i + "+B" + i);
    }
    
    // 设置总计公式
    OCX_OBJ.SetRangeFormula(sheetName, "A11", "=SUM(A1:A10)");
    OCX_OBJ.SetRangeFormula(sheetName, "B11", "=SUM(B1:B10)");
    OCX_OBJ.SetRangeFormula(sheetName, "C11", "=SUM(C1:C10)");
}

单元格属性设置

SetRangeLocked

语法

javascript
SetRangeLocked(SheetName, RangeName, isLocked)

功能

设置指定Excel表格区域的锁定属性。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"
isLocked必选bool设定所指定的区域,在工作表被保护的情况下是否保护

返回值

无返回值。

说明

设置指定Excel表格区域的锁定属性。

注意:需要特别注意,本方法仅是设置锁定保护区域。方法执行后,工作表并没有立即进入锁定保护状态。必须要搭配调用文档控件的SetReadOnly方法或者VBA的Protect方法才有效。

示例代码

javascript
// 锁定单个单元格
OCX_OBJ.SetRangeLocked("Sheet1", "A1", true);

// 解锁单元格
OCX_OBJ.SetRangeLocked("Sheet1", "A1", false);

// 锁定范围
OCX_OBJ.SetRangeLocked("Sheet1", "A1:C10", true);

// 批量设置锁定状态
function setLockedRanges(sheetName, ranges, isLocked) {
    ranges.forEach(function(range) {
        OCX_OBJ.SetRangeLocked(sheetName, range, isLocked);
    });
}

// 保护重要数据
function protectImportantData(sheetName) {
    // 锁定标题行
    OCX_OBJ.SetRangeLocked(sheetName, "A1:Z1", true);
    
    // 锁定公式列
    OCX_OBJ.SetRangeLocked(sheetName, "C:C", true);
    
    // 解锁数据输入区域
    OCX_OBJ.SetRangeLocked(sheetName, "A2:B100", false);
}

SetRangeColorIndex

语法

javascript
SetRangeColorIndex(SheetName, RangeName, colorIndex)

功能

设置指定Excel表格区域的颜色索引。

参数

名称必选/可选数据类型说明
SheetName必选stringsheet的名称或者索引
RangeName必选string表格的区域名称,如:"A1"
colorIndex必选long颜色索引值

返回值

无返回值。

说明

设置指定Excel表格区域的颜色索引。

常用颜色索引对照表

索引值颜色索引值颜色
1黑色9白色
2白色10黄色
3红色11浅绿色
4绿色12浅蓝色
5蓝色13浅红色
6黄色14浅黄色
7洋红色15浅洋红色
8青色16浅青色

示例代码

javascript
// 设置单元格颜色
OCX_OBJ.SetRangeColorIndex("Sheet1", "A1", 3); // 红色

// 设置范围颜色
OCX_OBJ.SetRangeColorIndex("Sheet1", "A1:C3", 10); // 黄色

// 设置标题行颜色
OCX_OBJ.SetRangeColorIndex("Sheet1", "A1:Z1", 4); // 绿色

// 条件着色
function conditionalColoring(sheetName, range) {
    var value = OCX_OBJ.GetRangeValue(sheetName, range);
    if (parseFloat(value) > 100) {
        OCX_OBJ.SetRangeColorIndex(sheetName, range, 3); // 红色
    } else if (parseFloat(value) > 50) {
        OCX_OBJ.SetRangeColorIndex(sheetName, range, 6); // 黄色
    } else {
        OCX_OBJ.SetRangeColorIndex(sheetName, range, 4); // 绿色
    }
}

// 创建彩色表格
function createColorfulTable(sheetName) {
    // 设置标题行
    OCX_OBJ.SetRangeColorIndex(sheetName, "A1:E1", 4); // 绿色
    
    // 设置数据行
    for (var i = 2; i <= 10; i++) {
        if (i % 2 === 0) {
            OCX_OBJ.SetRangeColorIndex(sheetName, "A" + i + ":E" + i, 9); // 白色
        } else {
            OCX_OBJ.SetRangeColorIndex(sheetName, "A" + i + ":E" + i, 11); // 浅绿色
        }
    }
}

完整示例

Excel数据管理系统

javascript
// Excel数据管理系统
class ExcelDataManager {
    // 创建工作表
    static createSheet(sheetName, beforeSheet = null, afterSheet = null) {
        if (beforeSheet) {
            OCX_OBJ.AddSheet(beforeSheet);
        } else if (afterSheet) {
            OCX_OBJ.AddSheet(null, afterSheet);
        } else {
            OCX_OBJ.AddSheet();
        }
    }
    
    // 获取工作表数量
    static getSheetCount() {
        return OCX_OBJ.GetSheetsCount();
    }
    
    // 设置单元格值
    static setCellValue(sheetName, cellAddress, value) {
        OCX_OBJ.SetRangeValue(sheetName, cellAddress, value);
    }
    
    // 获取单元格值
    static getCellValue(sheetName, cellAddress) {
        return OCX_OBJ.GetRangeValue(sheetName, cellAddress);
    }
    
    // 设置单元格公式
    static setCellFormula(sheetName, cellAddress, formula) {
        OCX_OBJ.SetRangeFormula(sheetName, cellAddress, formula);
    }
    
    // 获取单元格公式
    static getCellFormula(sheetName, cellAddress) {
        return OCX_OBJ.GetRangeFormula(sheetName, cellAddress);
    }
    
    // 设置单元格锁定
    static setCellLocked(sheetName, cellAddress, isLocked) {
        OCX_OBJ.SetRangeLocked(sheetName, cellAddress, isLocked);
    }
    
    // 设置单元格颜色
    static setCellColor(sheetName, cellAddress, colorIndex) {
        OCX_OBJ.SetRangeColorIndex(sheetName, cellAddress, colorIndex);
    }
}

财务报表生成器

javascript
// 财务报表生成器
function generateFinancialReport() {
    var sheetName = "财务报表";
    
    // 1. 创建报表标题
    function createReportHeader() {
        ExcelDataManager.setCellValue(sheetName, "A1", "财务报表");
        ExcelDataManager.setCellColor(sheetName, "A1", 4); // 绿色
        
        // 设置标题行
        var headers = ["项目", "1月", "2月", "3月", "合计"];
        for (var i = 0; i < headers.length; i++) {
            var cellAddress = String.fromCharCode(65 + i) + "2";
            ExcelDataManager.setCellValue(sheetName, cellAddress, headers[i]);
            ExcelDataManager.setCellColor(sheetName, cellAddress, 4); // 绿色
        }
    }
    
    // 2. 填充数据
    function fillReportData() {
        var data = [
            ["收入", "10000", "12000", "15000"],
            ["支出", "8000", "9000", "11000"],
            ["利润", "2000", "3000", "4000"]
        ];
        
        for (var i = 0; i < data.length; i++) {
            for (var j = 0; j < data[i].length; j++) {
                var cellAddress = String.fromCharCode(66 + j) + (3 + i);
                ExcelDataManager.setCellValue(sheetName, cellAddress, data[i][j]);
            }
        }
    }
    
    // 3. 设置公式
    function setupFormulas() {
        // 设置合计公式
        for (var i = 3; i <= 5; i++) {
            var cellAddress = "F" + i;
            var formula = "=B" + i + "+C" + i + "+D" + i;
            ExcelDataManager.setCellFormula(sheetName, cellAddress, formula);
        }
    }
    
    // 4. 设置保护
    function protectReport() {
        // 锁定公式单元格
        ExcelDataManager.setCellLocked(sheetName, "F3:F5", true);
        
        // 锁定标题行
        ExcelDataManager.setCellLocked(sheetName, "A1:F2", true);
    }
    
    // 5. 设置颜色
    function applyColors() {
        // 设置数据行颜色
        for (var i = 3; i <= 5; i++) {
            if (i % 2 === 0) {
                ExcelDataManager.setCellColor(sheetName, "A" + i + ":F" + i, 9); // 白色
            } else {
                ExcelDataManager.setCellColor(sheetName, "A" + i + ":F" + i, 11); // 浅绿色
            }
        }
    }
    
    // 执行报表生成
    createReportHeader();
    fillReportData();
    setupFormulas();
    protectReport();
    applyColors();
}

数据验证和格式化

javascript
// 数据验证和格式化工具
class ExcelDataValidator {
    // 验证数据格式
    static validateData(sheetName, range) {
        var value = ExcelDataManager.getCellValue(sheetName, range);
        
        // 验证数字
        if (isNaN(value)) {
            ExcelDataManager.setCellColor(sheetName, range, 3); // 红色
            return false;
        }
        
        // 验证范围
        var numValue = parseFloat(value);
        if (numValue < 0 || numValue > 10000) {
            ExcelDataManager.setCellColor(sheetName, range, 6); // 黄色
            return false;
        }
        
        // 正常数据
        ExcelDataManager.setCellColor(sheetName, range, 4); // 绿色
        return true;
    }
    
    // 格式化数据
    static formatData(sheetName, range, formatType) {
        var value = ExcelDataManager.getCellValue(sheetName, range);
        
        switch (formatType) {
            case "currency":
                var formattedValue = "¥" + parseFloat(value).toFixed(2);
                ExcelDataManager.setCellValue(sheetName, range, formattedValue);
                break;
            case "percentage":
                var formattedValue = (parseFloat(value) * 100).toFixed(2) + "%";
                ExcelDataManager.setCellValue(sheetName, range, formattedValue);
                break;
            case "date":
                var date = new Date(value);
                var formattedValue = date.toLocaleDateString();
                ExcelDataManager.setCellValue(sheetName, range, formattedValue);
                break;
        }
    }
}

注意事项

  1. 工作表操作

    • 工作表名称区分大小写
    • 索引从1开始
    • 插入位置要正确指定
  2. 单元格引用

    • 使用标准的Excel单元格地址格式(如A1、B2:C5)
    • 范围引用要正确
    • 注意大小写
  3. 公式设置

    • 公式必须以等号开头
    • 使用Excel标准函数
    • 注意相对引用和绝对引用
  4. 锁定保护

    • 设置锁定后需要调用保护方法
    • 锁定状态在保护生效后才起作用
    • 注意锁定范围的选择
  5. 颜色设置

    • 颜色索引值要正确
    • 注意颜色对比度
    • 合理使用颜色区分数据
  6. 性能优化

    • 批量操作比单个操作效率高
    • 避免频繁的单元格访问
    • 合理使用范围引用
  7. 错误处理

    • 检查工作表是否存在
    • 验证单元格地址格式
    • 处理公式错误
  8. 数据验证

    • 验证输入数据的格式
    • 检查数值范围
    • 处理异常数据