Board logo

标题: [文本处理] 批处理如何实现将excel的更新内容同步到文本文件中? [打印本页]

作者: wxdboiled    时间: 2014-10-26 00:03     标题: 批处理如何实现将excel的更新内容同步到文本文件中?

比如说一个excel
A         B            C       [attach]7805[/attach](注 A B C为excel 默认的表头,不是自己写的表头)
key1          名称        name
key2          角色        role
key3          权限        right
key4          日期        date
key5   时间        time

一个映射文件mapfile
zh{
key1:="名称",
key2:="角色",
key3:="权限",
key4:="日期",
key5:="时间"
}
en{
key1:="name",
key2:="role",
key3:="right",
key4:="date",
key5:="time"
}

这里key1  key2 key3 key4 key5....是固定的,对应在excel中的A列,B列对应zh{}中的内容,C列对应en{}。
通过key1-5 来替换mapfile中的内容。
请各位大神帮忙,多谢。
作者: apang    时间: 2014-10-31 19:56

  1. @set @n=0;/* & echo off
  2. cscript -nologo -e:jscript "%~0" > mapfile.txt
  3. pause & exit/b & rem */
  4. path = WScript.ScriptFullName.replace(/(.*?)[^\\]+$/, "$1");
  5. oExcel = new ActiveXObject("Excel.Application");
  6. oBook = oExcel.WorkBooks.Open(path + "wxd.xls");
  7. oExcel.Visible = false;
  8. oExcel.WorkSheets(1).Activate;
  9. row = oExcel.ActiveSheet.UsedRange.Rows.Count;
  10. sZH = "zh{\r\n";
  11. sEN = "en{\r\n";
  12. for (i=1; i<=row; i++) {
  13.         sKey = oExcel.Cells(i, 1);
  14.         sZH += sKey + ':="' + oExcel.Cells(i, 2) + '",\r\n';
  15.         sEN += sKey + ':="' + oExcel.Cells(i, 3) + '",\r\n';
  16. }
  17. oBook.Close(); oExcel.Quit()
  18. sZH = sZH.replace(/,\r\n$/, "\r\n}");
  19. sEN = sEN.replace(/,\r\n$/, "\r\n}");
  20. WScript.Echo(sZH + "\r\n" + sEN)
复制代码

作者: wxdboiled    时间: 2014-11-1 22:44

本帖最后由 wxdboiled 于 2014-11-2 14:11 编辑

回复 2# apang


这个脚本可以实现将excel输入到.txt文件中,但如果.txt文件中的内容有不在excel中的,但又不能删除,就只能通过key来替换txt中对应key后的内容。

麻烦再看下如何可以实现这样的需求。
作者: apang    时间: 2014-11-2 20:08

回复 3# wxdboiled


   
如果.txt文件中的内容有不在excel中的,但又不能删除


你一开始就应该给一个这样的样本
作者: apang    时间: 2014-11-2 20:26

回复 3# wxdboiled


    这样试试,zh{} 和 en{} 括弧中的内容全部做替换,括弧外的内容不变
  1. @set @n=0;/* & echo off
  2. cscript -nologo -e:jscript "%~0" < mapfile.txt > $
  3. move $ mapfile.txt
  4. pause & exit/b & rem */
  5. path = WScript.ScriptFullName.replace(/(.*?)[^\\]+$/, "$1");
  6. oExcel = new ActiveXObject("Excel.Application");
  7. oBook = oExcel.WorkBooks.Open(path + "wxd.xls");
  8. oExcel.Visible = false;
  9. oExcel.WorkSheets(1).Activate;
  10. row = oExcel.ActiveSheet.UsedRange.Rows.Count;
  11. arZH = []; arEN = [];
  12. for (i=1; i<=row; i++) {
  13.         sKey = oExcel.Cells(i, 1);
  14.         arZH.push(sKey + ':="' + oExcel.Cells(i, 2) + '"');
  15.         arEN.push(sKey + ':="' + oExcel.Cells(i, 3) + '"');
  16. }
  17. oBook.Close(); oExcel.Quit()
  18. sZH = "\r\n" + arZH.join(",\r\n") + "\r\n";
  19. sEN = "\r\n" + arEN.join(",\r\n") + "\r\n";
  20. txt = WScript.StdIn.ReadAll();
  21. txt = txt.replace(/(zh\{)[\s\S]*?(?=\})/i, "$1" + sZH);
  22. txt = txt.replace(/(en\{)[\s\S]*?(?=\})/i, "$1" + sEN);
  23. WScript.StdOut.Write(txt)
复制代码

作者: wxdboiled    时间: 2014-11-2 22:59

回复 5# apang


    这样不行的。zh{}和en{}中也有可能有其他的内容,如果这样替换的话就会丢失的。
作者: apang    时间: 2014-11-3 22:10

我还以为更新测试样本了呢,害我又下载一次

不明白你的真实意图,我放弃。
作者: wxdboiled    时间: 2014-11-3 22:25

回复 7# apang


    就是想根据key来做替换的。我错了,帮帮忙吧。。。




欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2