找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
楼主: batman

【练习-033】计算并重写xls文件

[复制链接]
发表于 2008-12-16 17:36:38 | 显示全部楼层
原帖由 batman 于 2008-12-16 17:20 发表

trese兄是不是写得复杂了点。。。。

确实如兄所言  
计算位数 且分步了 然后补位  
效率都给了计算位数  不考虑位数代码效率似乎可提高些许
发个 小数点后5位的
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "tokens=1-3 delims=    " %%a in ('type "test.xls"') do (
  3.   if not defined flag (
  4.      echo %%b        %%c>test.xls&set "flag=a"
  5.      ) else (
  6.        if "%%c"=="" (
  7.        >>test.xls echo %%a:%%b    !num:~,-5!.!num:~-5!
  8.        set num=
  9.      ) else (
  10.        >>test.xls echo %%b        %%c
  11.        set str=%%c
  12.        set str1=!str:*.=!
  13.        if "!str1!"=="%%c" set str1=
  14.        call set str2=%%str:.!str1!=%%
  15.        set str1=!str1!00000
  16.        set str1=!str1:~,5!
  17.        set/a num+=!str2!!str1!
  18.      )
  19.    )
  20. )
  21. pause
复制代码

[ 本帖最后由 terse 于 2008-12-16 22:23 编辑 ]
发表于 2008-12-18 20:01:09 | 显示全部楼层
  1. @echo on &setlocal enabledelayedexpansion
  2. set/a m=2,n=-1
  3. for /f "tokens=1-3 delims=        " %%i in (test.xls) do (
  4.         set/a n+=1
  5.         if !n!==0 (>test.xls echo %%j        %%k) else (
  6.                 if "%%j"=="total" (
  7.                 >>test.xls echo %%i:%%j        =sum(b!m!:b!n!^)
  8.                 set/a m=n+2
  9.                 ) else (
  10.                 >>test.xls echo %%j        %%k
  11.                 )
  12.         )
  13. )
  14. exit
复制代码
echo以及delims后面的空格都是一个TAB字符.顺便问问各位老大,怎么用p把数据写进已经排版的xls文件(比如居中,改变了列宽等)中呢?

[ 本帖最后由 qlcom 于 2008-12-18 20:15 编辑 ]

评分

参与人数 1PB +5 收起 理由
batman + 5 思路绝了!

查看全部评分

 楼主| 发表于 2008-12-19 08:19:14 | 显示全部楼层
原帖由 qlcom 于 2008-12-18 20:01 发表
@echo on &setlocal enabledelayedexpansion
set/a m=2,n=-1
for /f "tokens=1-3 delims=        " %%i in (test.xls) do (
        set/a n+=1
        if !n!==0 (>test.xls echo %%j        %%k) else (
    ...

set/a m=n+2 兄弟可以仔细看下文件是没有规律的,但你这种方法确是可取的,利用xls的函数公式,好!为这思路加分。
发表于 2008-12-19 12:23:23 | 显示全部楼层
原帖由 batman 于 2008-12-19 08:19 发表

set/a m=n+2 兄弟可以仔细看下文件是没有规律的,但你这种方法确是可取的,利用xls的函数公式,好!为这思路加分。


谁说没规律,total占一行(而去掉第一行后,除了total所在的行以外都要参加计算),下一个计算起点比起上一个计算终点的行数刚好相差2,顺便麻烦楼主帮我在本版求问的帖子解下锁,谢谢!
发表于 2012-10-17 15:47:24 | 显示全部楼层
加减法的运算就按照大数的写法就行了.
小数点后面补0到相等长度.在计算. 判断是否有进位.之后在处理整数..整数我想个人的工资不会有超过8位数的人才吧.
所以整体思路. 区分整数和小数,,小数补0至2数相等长度.在按大数四则计算小数.
发表于 2012-11-19 20:11:48 | 显示全部楼层
  1. @echo off & setlocal enabledelayedexpansion
  2. cd.>_new.xls
  3. ::解题思路为提升小数为整数
  4. for /f "tokens=1,2,3 delims=        " %%i in (test.xls) do (
  5.         if "%%j" equ "total" (
  6.                 echo %%i        %%j        !_%%i:~0,-2!.!_%%i:~-2!>>_new.xls
  7.         ) else (
  8.                 echo %%i        %%j        %%k>>_new.xls
  9.                 set _tmp=%%k
  10.                 set /a _decimal=!_tmp:.=*0+!
  11.                 set /a "_%%i+= _decimal + _tmp*100"
  12.         )
  13. )
  14. pause
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-16 19:16 , Processed in 0.018754 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表