通用邮件自动发送Winform控件开发(三)
2011-03-16 14:59
337 查看
在上一节中完成了Excel的打开,下面我们来看一下数据写入。首先我们分析一下,在Excel打开后,写入的过程应该是用户在外部调用写入方法,并传入一个DataTable数据源,其他的工作应该全部由写入方法完成,用户不需要管在写入过程中遇到的问题,好,那结合我们在上一节分析的在写入过程中可能遇到的问题,我们画出写入数据的流程图,如下:
上图中还有一个步骤缺失了,在写入数据完成后应该将本次数据写入的结束位置保存到配置文件中,以便下一次数据写入时直接读取。写入对外公开的方法只有一个,代码如下:
计时器检查连个参数,一个是队列内对象的数量,第二个是上一次写入操作是否完成,当队列内对象数量不为0并且上一次写入操作已经完成时,队列弹出一个顶部对象,开始下一次数据写入,代码如下:
其中需要将DataTable转换为二维对象数组,分割二维对象数组等方法就不一一啰嗦了!
上图中还有一个步骤缺失了,在写入数据完成后应该将本次数据写入的结束位置保存到配置文件中,以便下一次数据写入时直接读取。写入对外公开的方法只有一个,代码如下:
/// <summary> /// 将需要写入的数据塞入队列,等待计时器轮询条件是否满足,满足时执行写入操作 /// </summary> /// <param name="dt"></param> public void WriteExcel(System.Data.DataTable dt) { dtQueue.Enqueue(dt); } private void BeginWrite() { t = new System.Timers.Timer(); t.Interval = 1000; t.Enabled = true; t.Elapsed += new System.Timers.ElapsedEventHandler(t_Elapsed); t.Start(); } private void t_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { if (dtQueue.Count > 0 && flag == true) System.Threading.ThreadPool.QueueUserWorkItem(new System.Threading.WaitCallback(WriteData)); }
计时器检查连个参数,一个是队列内对象的数量,第二个是上一次写入操作是否完成,当队列内对象数量不为0并且上一次写入操作已经完成时,队列弹出一个顶部对象,开始下一次数据写入,代码如下:
private void WriteData(object obj) { int version, workSheet, beginRow; flag = false; AppconfigOperate.FindBeginWritePlace(out version, out workSheet, out beginRow); System.Data.DataTable dt = this.dtQueue.Dequeue(); switch (version) { case 2003: { if (dt.Rows.Count > 60000) { flag = true; throw new Exception("数据表行数过大,无法处理"); } object[,] objArray = DataTableToObjArray(dt); WriteObjToExcel(objArray, workSheet, beginRow, 60000); this._excelOperate.SaveChange(); flag = true; break; } case 2007: { if (dt.Rows.Count > 1000000) { flag = true; throw new Exception("数据表行数过大,无法处理"); } object[,] objArray = DataTableToObjArray(dt); WriteObjToExcel(objArray, workSheet, beginRow, 1000000); this._excelOperate.SaveChange(); flag = true; break; } } }
其中需要将DataTable转换为二维对象数组,分割二维对象数组等方法就不一一啰嗦了!
相关文章推荐
- 通用邮件自动发送Winform控件开发(一)
- 通用邮件自动发送Winform控件开发(二)
- 通用邮件自动发送Winform控件开发(六)
- 通用邮件自动发送Winform控件开发(四)
- 通用邮件自动发送Winform控件开发(五)
- 自动发送邮件程序开发
- Excel VBA开发自动发送邮件
- Excel VBA开发自动发送邮件
- 【干货】.NET开发通用组件发布(二) 邮件发送组件
- UFT开发实例:QTP调用OutLook自动发送邮件
- 用户验证信息邮件自动发送系统代码
- 自动发送邮件
- 利用mutt和msmtp实现邮件自动发送功能
- python自动发送报警监控邮件
- JavaBean邮件自动发送程序带附件
- Linux自动下发送HTML格式并带附件的邮件
- mailx自动发送邮件
- 提交订单系统自动发送邮件到收件人邮箱优化(邮件内容信息以月为单位)
- 自动发送邮件脚本