打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
调用Excel模版后根据自定义数据库字段同cell定位生成多Sheet的Excel文件...

最近给公司做个项目,要求每天全自动的根据一份Excel模版(带图片)把数据库中的数据自动添加进入相关cell中,并要求不同产品生成不同文件,同一产品不同型号生成不同Sheets...还要自动把当天生成的这些Excel文件自动邮件给指定客人...
恩恩,这就是自动化...
用了两个星期做完...下面说下关键的处理,给同样要做的朋友一些帮助:
1.要自动化,就需要用ini文件
加入:
   [DllImport("kernel32")]
   private static extern long WritePrivateProfileString(string section,string key,string val,string filePath);
   [DllImport("kernel32")]
   private static extern int GetPrivateProfileString(string section,string key,string def,StringBuilder retVal,int size,string filePath);

另外要加个Timer1,程序启动的时候读ini文件,确定是否需要哪些自动化,对Timer1的延时需要也在ini文件中设定:
private void Form1_Load(object sender, System.EventArgs e)
   {

    ini_read("Setup",7);
    ini_read("Parameter",55);
    ini_read("Email",9);
    if (this.checkBox1.Checked ==true) //判断是否"Setup"中设定了自动执行
    {
     timer1.Interval =int.Parse(this.textBox1.text.ToString ());
     timer1.Start();
    }     
   }
ini_read(string strName,int intSum)是我自己的读ini方法

2.根据条件生成DataSet....这个简单不写了
3.邦定到一个dataGrid1上
4.建立Excel文件
得到产品名同型号名,用DataView来实现:
DataView dv=new DataView ();
dv=((DataSet)dataGrid1.DataSource).Tables [0].DefaultView ;

调用生成一个Excel文件的方法:
public void GetTemplate(string strFileName,DataView dv,int intdvParameterS,int intdvParameterE,int intSheetTotal)
GetTemplate(strProductID,dv,(intEnd-intSheetTotal),intEnd,intSheetTotal+1);
解释下,strFileName就是一个产品的名,也是要做为文件名称的,intdvParameterS是dv中这个产品开始的index,intdvParameterE是dv中这个产品的最后一个index,intSheetTotal就是dv中这个产品的总数

在GetTemplate中要添加模版,拷贝模版给多个Sheet,保存文件:
调用放在\Template文件夹下的template.xls文件,
Microsoft.Office.Interop.Excel.Application objEa;
objEa.Workbooks.Add(((System.Environment.CurrentDirectory.Replace("\\","\\\\"))+"\\\\"+"Template\\template.xls"));

生成intSheetTotal个Sheet....

拷贝模版到Sheet
Microsoft.Office.Interop .Excel .Worksheet objEs;
objEs.Copy (objEa.Workbooks[1].Worksheets[1] ,Missing.Value );

用数组添加值吧,主要用for作循环
Microsoft.Office .Interop .Excel .Range[] objEr=new Microsoft.Office .Interop .Excel .Range[30];
objEr[i]=objEs.get_Range(strPara[i],Missing.Value);
objEr[i].Value2 =dv[intdvParameterS+k-1].Row[strField[i]].ToString();
strField[i]是ini中设定的数据库中字段
strPara[i]是ini中设定的Excel中位置,比如strField[0]="ProductID",strPara[0]="C22"
...
string   strName=strFileName;
string   strFolder=this.textBox2.Text+"\\"+strName+".xls"; //textBox2是文件夹路径
    this.listBox1.Items .Add(strFolder);//这是把这个Excel文件作为邮件附件添加进附件List中处理
objEa.Workbooks[1].SaveCopyAs(strFolder);

好了,循环添加完了后,保存就行了了,这样一个产品名称的Excel文件都完成了,里面有多个不同型号的Sheet,如果查询出来的是多个产品,那么就循环调用GetTemplate()就可以了

5.其他都简单
发邮件用
using System.Web.Mail ;
附件读刚才那个listBox1就可以了
文件夹操作用
    string strPath;
    strPath=this.textBox2 .Text ;
    System.IO.Directory.Delete(strPath,true);
    Directory.CreateDirectory (strPath);
嘿嘿,全删除  

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
EXCEL将文件保存为模版
如何将多个excel文件作为不同sheet都导入一个excel文件中?
将多个Excel文件合并到一个Excel的多个sheet,这个方法简单快捷
782560705/easyexcel
文件上传:读取文件流的形式
远程使用报表软件及报表输出解决方法汇总
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服