标题: [文本处理] 批处理如何实现将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
- @set @n=0;/* & echo off
- cscript -nologo -e:jscript "%~0" > mapfile.txt
- pause & exit/b & rem */
-
- path = WScript.ScriptFullName.replace(/(.*?)[^\\]+$/, "$1");
- oExcel = new ActiveXObject("Excel.Application");
- oBook = oExcel.WorkBooks.Open(path + "wxd.xls");
- oExcel.Visible = false;
- oExcel.WorkSheets(1).Activate;
- row = oExcel.ActiveSheet.UsedRange.Rows.Count;
- sZH = "zh{\r\n";
- sEN = "en{\r\n";
- for (i=1; i<=row; i++) {
- sKey = oExcel.Cells(i, 1);
- sZH += sKey + ':="' + oExcel.Cells(i, 2) + '",\r\n';
- sEN += sKey + ':="' + oExcel.Cells(i, 3) + '",\r\n';
- }
- oBook.Close(); oExcel.Quit()
-
- sZH = sZH.replace(/,\r\n$/, "\r\n}");
- sEN = sEN.replace(/,\r\n$/, "\r\n}");
-
- 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{} 括弧中的内容全部做替换,括弧外的内容不变- @set @n=0;/* & echo off
- cscript -nologo -e:jscript "%~0" < mapfile.txt > $
- move $ mapfile.txt
- pause & exit/b & rem */
-
- path = WScript.ScriptFullName.replace(/(.*?)[^\\]+$/, "$1");
- oExcel = new ActiveXObject("Excel.Application");
- oBook = oExcel.WorkBooks.Open(path + "wxd.xls");
- oExcel.Visible = false;
- oExcel.WorkSheets(1).Activate;
- row = oExcel.ActiveSheet.UsedRange.Rows.Count;
- arZH = []; arEN = [];
- for (i=1; i<=row; i++) {
- sKey = oExcel.Cells(i, 1);
- arZH.push(sKey + ':="' + oExcel.Cells(i, 2) + '"');
- arEN.push(sKey + ':="' + oExcel.Cells(i, 3) + '"');
- }
- oBook.Close(); oExcel.Quit()
-
- sZH = "\r\n" + arZH.join(",\r\n") + "\r\n";
- sEN = "\r\n" + arEN.join(",\r\n") + "\r\n";
- txt = WScript.StdIn.ReadAll();
- txt = txt.replace(/(zh\{)[\s\S]*?(?=\})/i, "$1" + sZH);
- txt = txt.replace(/(en\{)[\s\S]*?(?=\})/i, "$1" + sEN);
-
- 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 |