求助libxl库,批量修改红框里的内容,合并表格造成了表格的行号和列号不一样。求一下大家的有没有好的办法

amin 10月前 911


最新回复 (12)
  • 光庆 10月前
    1 2
    就普通的赋值不可以吗?
  • amin 10月前
    0 3

    我的截图是其中的两个表,我这边还有26个这样的表。我的想法是要批量修改所有表中 红框里的值。

  • 光庆 10月前
    1 4
    amin 我的截图是其中的两个表,我这边还有26个这样的表。我的想法是要批量修改所有表中 红框里的值。
    跟批量没啥关系吧,只要能改一个,就能改所有的吧 。
  • amin 10月前
    0 5
    因为每个表中红框的列号和行号不是一样的。就造成用一个脚本只能处理当前一个工作簿,不能批量处理26个工作簿。能有办法一次处理26个工作簿不。有没有直接获得红框的行号和列号。
  • 光庆 10月前
    0 6
    找到这个单元格不就行了。
  • 山海师 10月前
    0 7
    先找到左边那个固定内容的单元格的位置,然后开始往右边遍历单元格,找到的第一个有内容的单元格就是目标单元格了
  • amin 10月前
    0 8
    Code AardioLine:33复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
    • import console;
    • import godking.libxl;
    • import string;
    • //批量生成工作表的表名
    • filepath = "\res\5-1#\1.2、5-1#管内穿线和槽盒内敷线 检验批质量验收记录.xls"
    • var book = godking.libxl.open(filepath)
    • var sheet = book.sheet()
    • var vals= sheet.getTable()
    • var newvals = {}
    • for(i=1;#vals;1){
    • var a = vals[i]
    • for(j=1;#a;1){
    • if(a[j] != ""){
    • table.push(newvals,{i , j,a[j]})
    • }
    • }
    • }
    • book.close()
    • var name = "子单位"
    • for(i=1;#newvals;1){
    • if(string.match(newvals[i][3],name) != null){
    • console.log(newvals[i+1][1],newvals[i+1][2])
    • }
    • elseif(string.match(newvals[i][3],name) != null){
    • console.log("行"+newvals[i][1],"列"+newvals[i][2])
    • }
    • }
    • //import process
    • //process(filepath)
    • console.pause();

    这个是找根据蓝框里面的字符串,找后面的红框的的行号和列号。  光庆大佬看看有什么能在优化不能。

  • 光庆 9月前
    0 9

    Code AardioLine:24复制
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
    • import console;
    • import godking.libxl;
    • import string;
    • //批量生成工作表的表名
    • filepath = "\工作簿1.xlsx"
    • var book = godking.libxl.open(filepath);
    • for(i=1; book.getSheetCount();1){
    • var sheet = book.sheet(i);
    • for(n=1;sheet.getMergeCount();1){
    • var _,row,col = sheet.getMergeByindex(n);
    • var t = sheet.getCellStr(row,col);
    • if ..string.find(t,"@单位(子单位)"){
    • var _,row,col = sheet.getMergeByindex(n+1);
    • if row and col {
    • console.dump(string.format("发现:%s,位于表[%s]%i行,%i列",sheet.getCellStr(row,col),book.getSheetName(i),row,col));
    • } else {
    • console.dump("发现子单位,但后面不是要找的内容");
    • }
    • break;
    • }
    • }
    • }
    • console.pause();


  • amin 9月前
    0 10
    精练,大佬威武!!
  • amin 9月前
    0 11
    getMergeByindex 合并单元的这几个函数用的真好。大佬这个方法 少一个for循环。我换需要再练练这两个函数的用法。。。
  • 光庆 9月前
    0 12
    amin getMergeByindex     合并单元的这几个函数用的真好。大佬这个方法 少一个for循环。我换需要再练练这两个函数的用法。。。

    少两个循环。我的两个循环,一个是遍历表,一个是遍历合并单元格,找那个项目单元格。

    而你的三个循环,都用来找你的项目单元格。你缺少遍历表的循环。

    也就是说,一个遍历合并单元格的for循环,就可以代替你的那三个for循环,效率应该是很高。

  • amin 9月前
    0 13

    这就是差距呀,换需要跟大佬多多学习哈!

返回