原始的excel是能正常导入的,但是在excel里做了筛选的操作后(即便是取消了)就导入不成功了,一直提示:

Microsoft JET Database Engine 错误 '80040e37'

Microsoft Jet 数据库引擎找不到对象'Sheet1$_'。请确定对象是否存在,并正确地写出它的名称和路径。


把excel里的数据全选复制到一个新excel表里再导入的话又成功了。试过几台机都是这样,不知道有没有碰过这种现像。
posted @ 2008-12-30 16:29 李振波 阅读(254) 评论(0) 编辑

    最近接到一个小项目,是个专做移动电信欠费催收款的律师事务所,求要帮他们做个系统,把每批次的欠费数据平均分配给催收员(要求每个催收员分到的记录数和欠费金额都比较公平),然后等移动电信把提成报表传过来后再做提成计算就可以了。想想功能不多于是2K就接下来了。

   这个小系统主要的难点是在给催收员的数据分配上,事实上实现起来也不难。我想在分班或者其它有类似需求的系统上也可以用得上。

分平均分配的算法有很多,如蛇形算法,贪婪算法等等。

1、蛇形算法类似于下面的排序

A             B             C           D

100         99           98           97

93          94            95           96

92          91            90           89

 如果拿1-100的数字来分配当然蛇形算法最好不过的了,不过移动的欠费数据可不是这样,金额大的几万,小的0.01都有,所以这种算法没法用。

 2、倒序贪婪(我称之为倒序贪婪,也不懂该叫什么)

  过程大概是这样(m份数据分配到n个人的头上)

  1.1 把待分配的数据m从大到小排序;

  1.2 从数据m取出n份做为初始值分配给n个人;

  1.3 把这n个人的数据从小到大排序;

  1.4 从数据m再取出n份数据累加到n个人的头上

  1.5 重复1.3-1.4直至数据分配结束

 但得出来的结果也不合格,因为得出的金额数据相差太大

 

3、随机贪婪(我称之为随机贪婪,也不懂该叫什么)

  过程大概是这样(m份数据分配到n个人的头上)

  1.1 从数据m中随机取出n份做为初始值分配给n个人;

  1.2 n个人的数据从小到大排序;

  1.3 从数据m中随机再取出n份数据累加到n个人的头上

  1.4 重复1.2-1.3直至数据分配结束

  咋一看结果是不错,但如果在最后几次分配数据时,出现金额落差比较大时问题就出来了。

不过倒好解决,我们何不先进行几轮倒序贪婪,把大额度的数据排除,余下的数据再进行随机贪婪。这个结果客户也比较满意。

 代码实现:(原本是打算用C#做的,但我这个人太懒了,为了图速度就asp写了,要转为C#的话,也是很简单,主要把下面这个函数转为C#的语法也就差不多了)

Code

 

分配结果:

 其他代码就不贴了,大家感兴趣的话可以下载源文件来研究。

演示地址:http://www.51gif.net/mobiledata/index.asp

源码下载:http://www.51gif.net/mobiledata/mobiledata.rar

 

另:下周打算分离仿winform的产品入录界面代码(支持编号、拼音、产品名称、条形码自动完成录入)出来给大家,对开发web下进销存或者CRM感兴趣的朋友到时候可以一起交流一下。

图:

 

Flash演示:http://www.51gif.net/mobiledata/test.swf

 

posted @ 2008-12-30 16:17 李振波 阅读(4059) 评论(7) 编辑

 

软件界面

 

地址:http://www.51gif.net/Make/QFlash.htm

posted @ 2008-12-26 09:37 李振波 阅读(996) 评论(2) 编辑

界面,应该很容易上手吧

 

改版后:

 

 

生成效果:

 

 

还可以吧,演示地址:http://www.51gif.net/Make/QText2.htm

 

 

posted @ 2008-11-28 08:41 李振波 阅读(1571) 评论(6) 编辑
                //大家在做报表或查询的时候都会有给用户预设一些可选的日期范围(如上图)
                
//如本年度销售额、本季度利润、本月新增客户
                
//C#里内置的DateTime基本上都可以实现这些功能,巧用DateTime会使你处理这些事来变轻松多了
               
                
//今天
                DateTime.Now.Date.ToShortDateString();
                
//昨天,就是今天的日期减一
                DateTime.Now.AddDays(-1).ToShortDateString();
                
//明天,同理,加一
                DateTime.Now.AddDays(1).ToShortDateString();

                
//本周(要知道本周的第一天就得先知道今天是星期几,从而得知本周的第一天就是几天前的那一天,要注意的是这里的每一周是从周日始至周六止
                DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
                DateTime.Now.AddDays(Convert.ToDouble((
6 - Convert.ToInt16(DateTime.Now.DayOfWeek)))).ToShortDateString();
                
//如果你还不明白,再看一下中文显示星期几的方法就应该懂了
                
//由于DayOfWeek返回的是数字的星期几,我们要把它转换成汉字方便我们阅读,有些人可能会用switch来一个一个地对照,其实不用那么麻烦的              
                string[] Day = new string[] "星期日""星期一""星期二""星期三""星期四""星期五""星期六" };
                Day[Convert.ToInt16(DateTime.Now.DayOfWeek)];

                
//上周,同理,一个周是7天,上周就是本周再减去7天,下周也是一样
                DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
                DateTime.Now.AddDays(Convert.ToDouble((
6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) - 7).ToShortDateString();
                
//下周
                DateTime.Now.AddDays(Convert.ToDouble((0 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
                DateTime.Now.AddDays(Convert.ToDouble((
6 - Convert.ToInt16(DateTime.Now.DayOfWeek))) + 7).ToShortDateString();
                
//本月,很多人都会说本月的第一天嘛肯定是1号,最后一天就是下个月一号再减一天。当然这是对的
                
//一般的写法
                DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1"//第一天
                DateTime.Parse(DateTime.Now.Year.ToString() + DateTime.Now.Month.ToString() + "1").AddMonths(1).AddDays(-1).ToShortDateString();//最后一天

                
//巧用C#里ToString的字符格式化更简便
                DateTime.Now.ToString("yyyy-MM-01");
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-MM-01")).AddMonths(1).AddDays(-1).ToShortDateString();

                
//上个月,减去一个月份
                DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(-1).ToShortDateString();
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-MM-01")).AddDays(-1).ToShortDateString();
                
//下个月,加去一个月份
                DateTime.Parse(DateTime.Now.ToString("yyyy-MM-01")).AddMonths(1).ToShortDateString();
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-MM-01")).AddMonths(2).AddDays(-1).ToShortDateString();
                
//7天后
                DateTime.Now.Date.ToShortDateString();
                DateTime.Now.AddDays(
7).ToShortDateString();
                
//7天前
                DateTime.Now.AddDays(-7).ToShortDateString();
                DateTime.Now.Date.ToShortDateString();

                
//本年度,用ToString的字符格式化我们也很容易地算出本年度的第一天和最后一天
                DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).ToShortDateString();
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-01-01")).AddYears(1).AddDays(-1).ToShortDateString();
                
//上年度,不用再解释了吧
                DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(-1).ToShortDateString();
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-01-01")).AddDays(-1).ToShortDateString();
                
//下年度
                DateTime.Parse(DateTime.Now.ToString("yyyy-01-01")).AddYears(1).ToShortDateString();
                DateTime.Parse(DateTime.Now.ToString(
"yyyy-01-01")).AddYears(2).AddDays(-1).ToShortDateString();

                
//本季度,很多人都会觉得这里难点,需要写个长长的过程来判断。其实不用的,我们都知道一年四个季度,一个季度三个月
                
//首先我们先把日期推到本季度第一个月,然后这个月的第一天就是本季度的第一天了
                DateTime.Now.AddMonths(0 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01");
                
//同理,本季度的最后一天就是下季度的第一天减一
                DateTime.Parse(DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
                
//下季度,相信你们都知道了。。。。收工
                DateTime.Now.AddMonths(3 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01");
                DateTime.Parse(DateTime.Now.AddMonths(
6 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();
                
//上季度
                DateTime.Now.AddMonths(-3 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01");
                DateTime.Parse(DateTime.Now.AddMonths(
0 - ((DateTime.Now.Month - 1% 3)).ToString("yyyy-MM-01")).AddDays(-1).ToShortDateString();

posted @ 2006-10-20 09:59 李振波 阅读(3294) 评论(3) 编辑
<SCRIPT LANGUAGE="JavaScript">
<!--
function formatFloat(src, pos)
{
    
return Math.round(src*Math.pow(10, pos))/Math.pow(10, pos);
}


alert(formatFloat(
"1212.2323"2));
//-->
</SCRIPT>

posted @ 2006-04-29 09:56 李振波 阅读(15311) 评论(9) 编辑
摘要: 本人学习ASP.NET也是刚刚开始,尽管如此但还是按耐不住要把以前用ASP开发的基于WEB的进销存及OA系统用ASP.NET重写,此次重写将不仅是代码部份重写,数据库也将重新优化(主要是将会大量采用存储过程).我会将开发过程的大部分笔记和大家一起分享,本人才粗学浅,C#也是刚刚开始学习.如果有什么不对请大家不要见笑,还望多指教.GridView应用一本文将实现Gridview上添加/编辑/删除点序...阅读全文
posted @ 2006-04-24 22:09 李振波 阅读(8160) 评论(9) 编辑
摘要: deletefromtable1where[id]notin(selectmin([id])fromtable1groupbyfield1,field2)阅读全文
posted @ 2006-04-21 22:57 李振波 阅读(547) 评论(0) 编辑
摘要: for(i=0;i<10;i++){if(eval("document.getElementById(SubJect_"+i+")").checked==true){returntrue;}}阅读全文
posted @ 2006-04-21 11:25 李振波 阅读(1144) 评论(0) 编辑
摘要: 其实在这之前我跟asp打交道已经4年多。也做过很多网站和软件。想想当初从VB、Delphi、到ASP再到现在的ASP.NET又将会是个转折点。最近asp.net2.0和Ajax技术炒得这么火热,又让人激情重燃。看来B/S模式已经越来越成熟了。再也不能让自己落伍了。。。其实我自己对VB算是比较精通的了,但是想想或许C#更值得去学习。。于是。。那就从C#开始吧。。阅读全文
posted @ 2006-04-20 13:08 李振波 阅读(554) 评论(2) 编辑