搜索
aardio官方社区 门户 查看主题

想做一个万能录入器

发布者: lhyaimjw、 | 发布时间: 2011-6-2 08:45| 查看数: 11363| 评论数: 11|帖子模式

思路是这样,读取一个excel表格,在录入界面适当位置录入excel表格中对应的内容,然后通过“TAB”定位到下一个输入框,录入下一个字段内容,通过快捷键“ALT+S”(录入软件默认的)保存,通过“ALT+A”新建第二个人的信息,请问思路怎样?

最新评论

serveryou 发表于 2011-6-2 09:11:08

只要你想就没有做不出来的,关键是你要不要去做

只要你想就没有做不出来的,关键是你要不要去做
zhuyuruicu 发表于 2011-6-2 10:37:15

思路貌似可以,就是表达不清楚,看的晕晕的,建议用ini或txt,excel库的没看,不知道杂样

思路貌似可以,就是表达不清楚,看的晕晕的,建议用ini或txt,excel库的没看,不知道杂样
太子 发表于 2011-6-2 11:45:46

在录入界面适当位置录入excel表格中对应的内容, 录入界面是自己的软件,还是? 适当位置 是指哪里 表格中对应的内容

在录入界面适当位置录入excel表格中对应的内容,
录入界面是自己的软件,还是?
适当位置 是指哪里
表格中对应的内容
nvt303 发表于 2011-6-3 10:04:59

按这个思路是可以做到的。我自己用aardio做过类似的工作:速达的一个进销存软件没有基础资料导入功能,但是基础资料的数据量比较大,手工录入很费时间,所以就自己编

按这个思路是可以做到的。我自己用aardio做过类似的工作:速达的一个进销存软件没有基础资料导入功能,但是基础资料的数据量比较大,手工录入很费时间,所以就自己编了一个辅助工具来自动读取Excel、文件中的数据录入到速达软件中。
nvt303 发表于 2011-6-3 16:19:00

[color=#0000ff]自用代码供参考[/color] [color=#0000ff]import[/color][color=#000000] k

自用代码供参考

import key;
import winex;
import win.ui;
import win.util.tray;
import winex.key;
import winex.mouse;
import com.picture;
import win.util.tray;
import win.cur;//鼠标指针函数库
import mouse;
/*DSG{{*/
var winform = win.form(parent=...; right=548;acceptfiles=1;bottom=299;text="速达基础资料自动录入" )
winform.add(
button2={ bottom=48;color=0;right=520;left=444;top=19;font=LOGFONT( name=
"微软雅黑";h=-19;out=3;family=34;clip=2;quality=1 );z=12;text="上一行";cls="button" };
static4={ bottom=162;align=
"center";text="计量单位";left=16;top=142;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=5;color=0;right=92;transparent=1;cls="static" };
static10={ bottom=288;color=255;text=
"";left=13;top=265;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );transparent=1;right=534;z=16;edge=1;cls="static" };
static6={ notify=1;color=0;bottom=68;align=
"center";text="B2";left=99;top=48;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );border=1;transparent=1;z=7;right=433;cls="static" };
static8={ transparent=1;bottom=127;align=
"center";text="E2";border=1;top=107;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );color=0;z=9;left=98;right=432;cls="static" };
static={ bottom=36;align=
"center";text="当  前  行";left=16;top=16;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=1;color=0;right=92;transparent=1;cls="static" };
button5={ bottom=139;color=0;right=521;left=445;top=110;font=LOGFONT( name=
"微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=15;text="单行录入";cls="button" };
button3={ bottom=94;color=0;right=521;left=445;top=65;font=LOGFONT( name=
"微软雅黑";h=-19;out=3;family=34;clip=2;quality=1 );z=13;text="下一行";cls="button" };
static5={ transparent=1;bottom=38;align=
"center";text="2";border=1;top=18;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );color=0;z=6;left=99;right=156;cls="static" };
static7={ transparent=1;bottom=98;align=
"center";text="A2";border=1;top=78;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );color=0;z=8;left=99;right=433;cls="static" };
static3={ bottom=131;align=
"center";text="货品类别";left=16;top=111;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=4;color=0;right=92;transparent=1;cls="static" };
static9={ transparent=1;bottom=162;align=
"center";text="C2";border=1;top=142;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );color=0;z=10;left=98;right=153;cls="static" };
button={ bottom=245;color=0;text=
"批  量  增  加  基  础  资  料";left=25;top=203;font=LOGFONT( name="微软雅黑";h=-21;out=3;family=34;clip=2;quality=1 );z=11;right=521;cls="button" };
static1={ bottom=65;align=
"center";text="品名规格";left=16;top=45;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=2;color=0;right=92;transparent=1;cls="static" };
button4={ bottom=190;color=0;right=520;left=337;top=155;font=LOGFONT( name=
"微软雅黑";h=-19;out=3;family=34;clip=2;quality=1 );z=14;text="清除货品资料";cls="button" };
static2={ bottom=99;align=
"center";text="货品编码";left=16;top=79;font=LOGFONT( name="微软雅黑";h=-16;out=3;family=34;clip=2;quality=1 );z=3;color=0;right=92;transparent=1;cls="static" }
)
/*}}*/

准备工作=
/**
1、拖入包含“货品资料”的电子表格文件。
2、在“批量增加基础资料”或者“单条录入”之前
   打开速达“货品--编辑”窗口,并在最上层显示
3、可以用“ESC”键中断过程,有时需要按多次ESC。
**/

win.msgbox(准备工作,
"准备工作")

//移动窗口到屏幕右上角
SetWindowPos(winform.hwnd,0xFFFFFFFF,1020-220,60,548,299,0x40)

当前行=
tonumber(winform.static5.text)

win.util.tray.pop(
"打开速达“货品--编辑”窗口,并在最上层显示","提示")  
win.delay(500)
winform.static10.text=
"等待拖入包含“货品资料”的电子表格文件"

//自动删除货品资料
winform.button4.oncommand = function(id,event){
    winform.static10.text=
"删除完毕后,按ESC键退出删除。"
   
    hwndDel=winex.findEx(,,
"TGoodsListForm","货品--基础资料")
        win.delay(30)
   
var lpRect = ::RECT();
    re, lpRect = ::GetWindowRect(hwndDel, lpRect);

    winex.key.combine(hwndDel,
"CTRL","D")
        win.delay(5)
        winex.key.combine(hwndDel,
"CTRL","D")   
   
while( ! key.getStateX( 0x1B/*_VK_ESCAPE*/ ) ){
        
sleep(100)
        
        ok=winex.find(
"#32770","警告" )
        win.delay(50)
        winex.mouse.click(hwndDel,lpRect.left+30,lpRect.top+8)
        
//mouse.click(lpRect.left+30,lpRect.top+8)
        key.press("ENTER")
        winex.key.combine(hwndDel,
"CTRL","D")
        win.delay(5)
    }
}

当前=
function(){
    winform.static10.text=
"当前行="++当前行
    win.delay(50)
    winform.static5.text=当前行
    winform.static6.text=sh.cells(当前行,2).value2
    winform.static7.text=sh.cells(当前行,1).value2
    winform.static8.text=sh.cells(当前行,5).value2
    winform.static9.text=sh.cells(当前行,3).value2  
}

next=
function(){
    当前行++
    当前()  
}

打开电子表格 =
function(filename){
excel = com.CreateObject(
"Excel.Application")   //创建Excel对象
book=excel.Workbooks.Add(filename)              //添加工作簿
excel.Visible = 0                           //设置可见
sh = book.Worksheets(1)                         //工作表

当前()
}

//下一行
winform.button3.oncommand = function(id,event){
    next();
}

//上一行
winform.button2.oncommand = function(id,event){
   
//win.msgbox( winform.button2.text );
    if(当前行<=2){ return ; }
    当前行--
    当前()  
}

findEx =
function( hwd,str ){//精确查找指定的项
    var ind = ::SendMessage(hwd , 0x158/*_CB_FINDSTRINGEXACT*/, , str ) ;
   
return ind!=-1/*_CB_ERR*/?ind+1:0
}

delay1=30
delay2=20
//控件之间延时

add=
function( ){
   
sleep(delay1)
    winex.mouse.click(hwnd[3],编码x,编码y)
    win.delay(delay2)
   
//货品代码
    User32.api("SendMessage", "int(int hwndSpy, int uMsg, int wParam,
            string lParam)"
)(hwnd[3], 0xC/*_WM_SETTEXT*/, 0, sh.cells(当前行,1).value2);
   
//品名规格
    //winex.mouse.click(hwnd[1],规格x,规格y)
    mouse.click( 规格x,规格y,true )
    win.delay(delay2)
    User32.api(
"SendMessage", "int(int hwndSpy, int uMsg, int wParam,
            string lParam)"
)(hwnd[1], 0xC/*_WM_SETTEXT*/, 0, sh.cells(当前行,2).value2);


//货品类别  
if( sh.cells(当前行,5).value2 ){
        
var ind = findEx( hwnd[2] , sh.cells(当前行,5).value2 ) ;//根据字符串查找索引
        //win.msgbox("索引"++ind,"aardio")
        //::SendMessage(hwnd[2], 0x14E/*_CB_SETCURSEL*/, topointer(ind-1) );//选择索引项
        if( ind<15 ){
            mouse.click(类别x,类别y,
true)
            win.delay(delay1)      
            mouse.click(类别x,类别y1+(ind-1)*16,
true)   
            win.delay(delay2)
        
        }
        
else{
            mouse.click(类别x,类别y,
true)      
            win.delay(delay1)   
            
for(i=1;ind-14;1){
                mouse.click(x11,类别y1+(14-1)*16,
true)         
                win.delay(10)
            }
               
sleep((ind-14)*500)
                mouse.click( 类别x,类别y1+(14-1)*16,
true )                  
        }
        win.delay(100)

}
   
//计量单位
if( sh.cells(当前行,3).value2 ){
        
var indUnit = ::SendMessage(hwnd[4] , 0x158/*_CB_FINDSTRINGEXACT*/, , sh.cells(当前行,3).value2 ) ;//根据字符串查找索引
   
        
//::SendMessage(hwnd[4], 0x14E/*_CB_SETCURSEL*/, topointer(ind) );//选择索引项
        mouse.click(单位x,单位y,true)      
        win.delay(delay1)      
        mouse.click(单位x,单位y1+indUnit*12,
true)   
                    
        
//mouse.clickDb(售价x,售价y,true)
        win.delay(delay2)
}
//单击增加按钮
::SendMessageInt(hwnd[5], 0xf5/*_BM_CLICK*/, 0, 0);
sleep(20)
   
}

获取句柄=
function(...){
    winform.static10.text=
"打开速达“货品--编辑”窗口,并在最上层显示"  
   
    hwndSpy=winex.findEx(,,
"TGoodsEditForm","货品--编辑")
    win.delay(1000)
   
if( !hwndSpy ){
    hwndSpy=winex.findEx(,,
"TGoodsEditForm","货品--编辑")
}
else{
        var lpRect = ::RECT();
        re, lpRect = ::GetWindowRect(hwndSpy, lpRect);
        
//io.open()
        //io.print(lpRect.left,lpRect.top)
        x1=120
        x11=lpRect.left+208
//类别下拉列表向下滚动按钮
        x2=390
        x3=495
        y1=47
        y2=74
        y21=90;
//12 单位下拉列表第一项
        y3=104
        y31=122;
//106+16 类别下拉列表第一项
        y4=128
        y5=167
        y6=194
        y7=222
        y8=242
        
/**控件布局
        属性            确定
        规格    单位    取消
        类别    售价    增加
        编码    进价    非使用
                加权
                上限
                下限
                拆装
        **/

        规格x = lpRect.left + x1
        规格y = lpRect.top  + y2
        类别x = lpRect.left + x1
        类别y = lpRect.top  + y3
        类别y1 = lpRect.top  + y31  
        编码x = lpRect.left + x1
        编码y = lpRect.top  + y4
        单位x = lpRect.left + x2
        单位y = lpRect.top  + y2
        单位y1 = lpRect.top  + y21  
        售价x = lpRect.left + x2
        售价y = lpRect.top  + y3   
        增加x = lpRect.left + x3
        增加y = lpRect.top  + y3
        
        坐标位置获取句柄=
function(x,y){
            hwndS = winex.fromPointReal( x,y );
            
return hwndS;
        }
        
        hwnd={}
        hwnd[1]=坐标位置获取句柄(规格x,规格y)
        hwnd[2]=坐标位置获取句柄(类别x,类别y)
        hwnd[3]=坐标位置获取句柄(编码x,编码y)
        hwnd[4]=坐标位置获取句柄(单位x,单位y)
        hwnd[5]=坐标位置获取句柄(增加x,增加y)
}  
}

//批量增加货品资料
winform.button.oncommand = function(id,event){
   
if( winform.static6.text != "B2" ){
        获取句柄()
        
if( hwndSpy ){
            mouse.click(编码x,编码y,
true)
            win.delay(500)
            
while( ! key.getStateX( 0x1B/*_VK_ESCAPE*/) ){
               
if(sh.cells(当前行,2).value2){
                    add()
                    next()
                }
            }
        
        }
    }
   
else{ //没有拖入电子表格文件
        win.msgbox("请先拖入电子表格文件后,再次点击!","aardio")
    }
}

//单行录入
winform.button5.oncommand = function(id,event){
   
if( winform.static6.text != "B2" ){
        获取句柄()
        mouse.click(编码x,编码y,
true)
        win.delay(1000)
        add()
      }
   
else{ //没有拖入电子表格文件
        win.msgbox("请先拖入电子表格文件后,再次点击!","aardio")
        }
    }

winform.wndproc =
function(hwnd,message,wparam,lparam){
select(message) {//判断消息类型

   
case 0x233/*_WM_DROPFILES*/                 //拖动消息
    {
    filename=win.getDropFile(wparam )[1]            
//取得文件名
    //winform.txtEdit.text = filename;          //edit控件显示文件名
    //winform.redraw()
    win.util.tray.pop(filename,"文件名")
    打开电子表格(filename)                              


winform.show()

win.loopMessage();
if(excel){    excel.Quit()  }
return winform;

点评

真棒: 5.0
最好把excel表等打包供研究  发表于 2011-11-16 22:32
真棒: 5
谢谢分享  发表于 2011-6-3 23:33

评分

参与人数 2专家分 +100 银币 +90 收起 理由
qqmmcc + 100
cjc0045 + 90 很给力!

查看全部评分

wuyouzhai 发表于 2011-7-24 13:24:20

{:soso_e103:}很好哦谢谢分享啊!

{:soso_e103:}很好哦谢谢分享啊!
vqimwr 发表于 2011-8-13 23:23:50

不知道楼主是不是要做和ntv303类似的工作。不太理解。如果要将excel数据录入特定软件界面的话,就是做以下工作,读excel数据入数组,打开软件,找录入框句

不知道楼主是不是要做和ntv303类似的工作。不太理解。如果要将excel数据录入特定软件界面的话,就是做以下工作,读excel数据入数组,打开软件,找录入框句柄,数组数据写入,…
低调点 发表于 2011-9-6 19:31:32

注册时间2011-6-2最后登录2011-6-2 看样子楼主是做不出来了...

注册时间2011-6-2最后登录2011-6-2

看样子楼主是做不出来了...
cjc0045 发表于 2011-11-16 09:29:33

[i=s] 本帖最后由 cjc0045 于 2011-11-16 09:30 编辑 [/i] [quote][size=2][color=#999999]nv

本帖最后由 cjc0045 于 2011-11-16 09:30 编辑
nvt303 发表于 2011-6-3 16:19
自用代码供参考

import win;

刚好要用到,谢谢nvt分享。。 有参考就好办了。
qqmmcc 发表于 2012-2-12 23:50:21

nvt303 这个例子真好啊,我也会用到的,谢谢分享{:soso_e100:}

nvt303 这个例子真好啊,我也会用到的,谢谢分享{:soso_e100:}
oliverpep 发表于 2017-5-29 14:17:13
这个例子很有启发性

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2017-11-23 21:08 , Processed in 0.062500 second(s), 25 queries , WinCache On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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