• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

asp.net(C#)套用模板操作ExcelC#操作Excel,套用模板并对数据进行分页 ...

原作者: [db:作者] 来自: [db:来源] 收藏 邀请
当需要输出带大量公式的Excel文档的时候,在代码里写公式就太累了。
用设计好的Excel模板,复制一下,往里面添加数据比较省事。
模板

导出文件:

大气象
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

using System.IO;
using System.Reflection;
using Microsoft.Office.Interop.Excel;

public partial class _Default : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    {
        
if (!IsPostBack)
            Bind();
    }
    
private void Bind()
    {
        
//模板文件
        string TempletFileName = Server.MapPath("template/"+ "template.xlsx";
        
//导出文件
        string ReportFileName = Server.MapPath("xls/"+ "out.xlsx";

        
string strTempletFile = Path.GetFileName(TempletFileName);
        
//将模板文件复制到输出文件 
        FileInfo mode = new FileInfo(TempletFileName);
        mode.CopyTo(ReportFileName, 
true);

        
//打开excel
        object missing = Missing.Value;
        Application app 
= null;
        Workbook wb 
= null;
        Worksheet ws 
= null;
        Range r 
= null;
        
//
        app = new Microsoft.Office.Interop.Excel.Application();
        wb 
= app.Workbooks.Open(ReportFileName, false, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
        app.Visible 
= true;

        
//得到WorkSheet对象
        ws = (Worksheet)wb.Worksheets.get_Item(1);

        
//添加或修改WorkSheet里的数据
        ws.Cells[11= "100";
        ws.Cells[
21= "100";
        ws.Cells[
22= "100";
        
//代码里写个公式
        r = (Range)ws.Cells[23];
        r.Formula 
= "=A2*B2";

        
//输出Excel文件并退出
        wb.Save();
        wb.Close(
nullnullnull);
        app.Workbooks.Close();
        app.Application.Quit();
        app.Quit();

        System.Runtime.InteropServices.Marshal.ReleaseComObject(ws);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(wb);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(app);

        ws 
= null;
        wb 
= null;
        app 
= null;
    }
}

参考:

Demo文件下载

  1using System;
  2using System.IO;
  3using System.Data;
  4using System.Reflection;
  5using System.Diagnostics;
  6using cfg = System.Configuration;
  7//using Excel;
  8
  9namespace ExcelHelperTest
 10        /// 功能说明:套用模板输出Excel,并对数据进行分页
 13    /// 作    者:Lingyun_k
 14    /// 创建日期:2005-7-12
 15    /// </summary>
 16    public class ExcelHelper
 17            protected string templetFile = null;
 19        protected string outputFile = null;
 20        protected object missing = Missing.Value;
 21
 22                /// 构造函数,需指定模板文件和输出文件完整路径
 24        /// </summary>
 25        /// <param name="templetFilePath">Excel模板文件路径</param>
 26        /// <param name="outputFilePath">输出Excel文件路径</param>
 27        public ExcelHelper(string templetFilePath,string outputFilePath)
 28                    if(templetFilePath == null)
 30                throw new Exception("Excel模板文件路径不能为空!");
 31
 32            if(outputFilePath == null)
 33                throw new Exception("输出Excel文件路径不能为空!");
 34
 35            if(!File.Exists(templetFilePath))
 36                throw new Exception("指定路径的Excel模板文件不存在!");
 37
 38            this.templetFile = templetFilePath;
 39            this.outputFile = outputFilePath;
 40
 41        }
 42
 43                /// 将DataTable数据写入Excel文件(套用模板并分页)
 45        /// </summary>
 46        /// <param name="dt">DataTable</param>
 47        /// <param name="rows">每个WorkSheet写入多少行数据</param>
 48        /// <param name="top">行索引</param>
 49        /// <param name="left">列索引</param>
 50        /// <param name="sheetPrefixName">WorkSheet前缀名,比如:前缀名为“Sheet”,那么WorkSheet名称依次为“Sheet-1,Sheet-2”</param>
 51        public void DataTableToExcel(DataTable dt,int rows,int top,int left,string sheetPrefixName)
 52                    int rowCount = dt.Rows.Count;        //源DataTable行数
 54            int colCount = dt.Columns.Count;    //源DataTable列数
 55            int sheetCount = this.GetSheetCount(rowCount,rows);    //WorkSheet个数
 56            DateTime beforeTime;    
 57            DateTime afterTime;
 58            
 59            if(sheetPrefixName == null || sheetPrefixName.Trim() == "")
 60                sheetPrefixName = "Sheet";
 61
 62            //创建一个Application对象并使其可见
 63            beforeTime = DateTime.Now;
 64            Excel.Application app = new Excel.ApplicationClass();
 65            app.Visible = true;
 66            afterTime = DateTime.Now;
 67
 68            //打开模板文件,得到WorkBook对象
 69            Excel.Workbook workBook = app.Workbooks.Open(templetFile,missing,missing,missing,missing,missing,
 70                                missing,missing,missing,missing,missing,missing,missing);
 71
 72            //得到WorkSheet对象
 73            Excel.Worksheet workSheet = (Excel.Worksheet)workBook.Sheets.get_Item(1);
 74
 75            //复制sheetCount-1个WorkSheet对象
 76            for(int i=1;i<sheetCount;i++)
 77                            ((Excel.Worksheet)workBook.Worksheets.get_Item(i)).Copy(missing,workBook.Worksheets[i]);
 79            }
 80
 81                        for(int i=1;i<=sheetCount;i++)
 83                            int startRow = (i - 1* rows;        //记录起始行索引
 85                int endRow = i * rows;            //记录结束行索引
 86
 87                //若是最后一个WorkSheet,那么记录结束行索引为源DataTable行数
 88                if(i == sheetCount)
 89                    endRow = rowCount;
 90
 91                //获取要写入数据的WorkSheet对象,并重命名
 92                Excel.Worksheet sheet = (Excel.Worksheet)workBook.Worksheets.get_Item(i);
 93                sheet.Name = sheetPrefixName + "-" + i.ToString();
 94
 95                //将dt中的数据写入WorkSheet
 96                for(int j=0;j<endRow-startRow;j++)
 97                                    for(int k=0;k<colCount;k++)
 99                                            sheet.Cells[top + j,left + k] = dt.Rows[startRow + j][k].ToString();
101                    }
102                }
103
104                //写文本框数据
105                Excel.TextBox txtAuthor = (Excel.TextBox)sheet.TextBoxes("txtAuthor");
106                Excel.TextBox txtDate = (Excel.TextBox)sheet.TextBoxes("txtDate");
107                Excel.TextBox txtVersion = (Excel.TextBox)sheet.TextBoxes("txtVersion");
108
109                txtAuthor.Text = "KLY.NET的Blog";
110                txtDate.Text = DateTime.Now.ToShortDateString();
111                txtVersion.Text = "1.0.0.0";
112            }
113            #endregion
114
115            //输出Excel文件并退出
116            try
117                            workBook.SaveAs(outputFile,missing,missing,missing,missing,missing,Excel.XlSaveAsAccessMode.xlExclusive,missing,missing,missing,missing);
119                workBook.Close(null,null,null);
120                app.Workbooks.Close();
121                app.Application.Quit();
122                app.Quit();
123
124                System.Runtime.InteropServices.Marshal.ReleaseComObject(workSheet);
125                System.Runtime.InteropServices.Marshal.ReleaseComObject(workBook);
126                System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
127
128                workSheet=null;
129                workBook=null;
130                app=null;
131
132                GC.Collect();
133            }
134            catch(Exception e)
135                            throw e;
137            }
138            finally
139                            Process[] myProcesses;
141                DateTime startTime;
142                myProcesses = Process.GetProcessesByName("Excel");
143
144                //得不到Excel进程ID,暂时只能判断进程启动时间
145                foreach(Process myProcess in myProcesses)
146                                    startTime = myProcess.StartTime;
148
149                    if(startTime > beforeTime && startTime < afterTime)
150                                            myProcess.Kill();
152                    }
153                }
154            }
155            
156        }
157
158        
159                /// 获取WorkSheet数量
161        /// </summary>
162        /// <param name="rowCount">记录总行数</param>
163        /// <param name="rows">每WorkSheet行数</param>
164       

鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#getpost的方法发布时间:2022-07-14
下一篇:
C#中DataTable与XML格式的相互转换发布时间:2022-07-14
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap