
#打开并处理 Excel 工作表
#使用封装的 Excel 函数来实现

#预处理函数: 设置脚本加载后自动启动
#mkscript_config_auto_start()

#预处理函数: 设置MKScript的窗口大小
mkscript_window_initial_size(600, 300) 

#初始化COM库
com_initialize()

#创建 COM 组件对象 Excel.Application
int excelApp = com_object_new("Excel.Application")
#println("excelApp:" + excelApp)

if excelApp > 0

    #COM 组件对象 Excel.Application 成功创建
    
  
    #输出当前 Excel 版本信息    
    println("excel version:" + excel_get_version(excelApp))
    
    #关闭Excel相关的提示和警告消息    
    excel_display_alert(excelApp, 0)
    
    #显示Excel软件窗口界面    
    #excel_show_window(excelApp)
    
    #隐藏Excel软件窗口界面    
    excel_hide_window(excelApp)
    
    #获取 Workbooks 对象句柄
    int workbooks = excel_get_workbooks(excelApp)
    
    #打开文件并返回 workbook 句柄
    string excelFilePath = get_script_folder_path() + "\\test.xlsx"
    int workbook = workbooks_open(workbooks, excelFilePath)
    #println("workbook:" + workbook)
    
    if workbook > 0
    
        #文件正常打开        
        
        #获取 Worksheets 对象
        int worksheets = workbook_get_worksheets(workbook) 
        
        #获取 Worksheet 对象
        int worksheet = worksheets_get_index(worksheets, 1)
        
        #选择当前 Worksheet 对象
        worksheet_select(worksheet)
        
        #换行
        println("")        
        
        #读取第一行内容
        string t1 = worksheet_get_cell_value_string(worksheet, 1, 1)
        string t2 = worksheet_get_cell_value_string(worksheet, 1, 2)
        string t3 = worksheet_get_cell_value_string(worksheet, 1, 3)
        string t4 = worksheet_get_cell_value_string(worksheet, 1, 4)
        
        #输出第一行内容, space() 函数主要起到排版作用
        println(t1 + " " + space(7 - len(t1)) + t2 + space(6 - len(t2)) + t3 + space(6 - len(t3)) + t4 + space(6 - len(t4)))        
        
        #输出分隔符
        println("------------------------------")

        #定义一个变量, 表示行数
        int row

        #读取记录(从第 2 行 到 第 4 行)
        for row = 2 to 4
        
            #姓名
            string name = worksheet_get_cell_value_string(worksheet, row, 1)
            
            #数学
            double math = worksheet_get_cell_value_double(worksheet, row, 2)
            
            #语文
            double chinese = worksheet_get_cell_value_double(worksheet, row, 3)
            
            #英语
            double english = worksheet_get_cell_value_double(worksheet, row, 4)
            
            #各项成绩保留1位小数
            string mathText = dtos(math, 1)            
            string chineseText = dtos(chinese, 1)
            string englishText = dtos(english, 1)
        
            #输出一行记录, space() 函数主要起到排版作用
            println(name + " " + space(9 - len_byte(name, "gbk")) + mathText + space(8 - len_byte(mathText, "gbk")) + chineseText + space(8 - len_byte(chineseText, "gbk")) + englishText + space(8 - len_byte(englishText, "gbk")))
            
        next
        
        #初始化随机数
        randomize()        

        #单元格(B2)内容设置为 80 分以上的一个随机数
        worksheet_set_range_value_int(worksheet, "B2", 80 + dtoi(rnd() * 20))
        
        #设置单元格(B2)的文字颜色
        worksheet_set_range_color(worksheet, "B2", rgb(255, 0, 0))
        
        #单元格(D4)内容设置为 80 分以上的一个随机数
        worksheet_set_range_value_double(worksheet, "D4", 80 + dtoi(rnd() * 20))
        
        #设置单元格(D4)的文字颜色
        worksheet_set_range_color(worksheet, "D4", rgb(255, 0, 0))        



        #保存工作表        
        workbook_save(workbook)
    
        println("")
        println("成绩已更新并保存")        
        
        #退出 excel
        excel_quit(excelApp)
        
        #释放 Excel.Application 对象
        com_object_free(excelApp)        
        
        println("")
        println("完成")    
    
    else
    
        println("workbooks_open() 打开文件 " + excelFilePath + " 出错, 错误码:" + "0x" + hex(get_last_error()) + "(" + get_last_error() + ")")
    
    endif    

else

    println("创建 COM 对象 Excel.Application 失败，返回的错误信息：" + get_last_error())

endif


