Excel导出

<!DOCTYPE html>
<html>
<head>
    <title>ASP.NET版Memcached监控工具</title>
    <style type="text/css">
        ul
        {
            list-style: none;
        }
        li
        {
            width: 200px;
            height: 150px;
            float: left;
            margin-right: 10px;
            margin-bottom:10px;
        }
        li span
        {
            display: block;
            width: 200px;
        }
        li img
        {
            width: 200px;
            height: 100px;
        }
    </style>
    <script type="text/javascript">

        (function (bool) {
            function setInnerText(o, s) {
                while (o.childNodes.length != 0) {
                    o.removeChild(o.childNodes[0]);
                }

                o.appendChild(document.createTextNode(s));
            }

            function getInnerText(o) {
                var sRet = "";

                for (var i = 0; i < o.childNodes.length; i++) {
                    if (o.childNodes[i].childNodes.length != 0) {
                        sRet += getInnerText(o.childNodes[i]);
                    }

                    if (o.childNodes[i].nodeValue) {
                        if (o.currentStyle.display == "block") {
                            sRet += o.childNodes[i].nodeValue + "\n";
                        } else {
                            sRet += o.childNodes[i].nodeValue;
                        }
                    }
                }

                return sRet;
            }

            if (bool) {
                HTMLElement.prototype.__defineGetter__("currentStyle", function () {
                    return this.ownerDocument.defaultView.getComputedStyle(this, null);
                });

                HTMLElement.prototype.__defineGetter__("innerText", function () {
                    return getInnerText(this);
                })

                HTMLElement.prototype.__defineSetter__("innerText", function (s) {
                    setInnerText(this, s);
                })
            }
        })(/Firefox/.test(window.navigator.userAgent));
</script>

    <script type="text/javascript">
        function innerText(node) {//返回的是数组类型
            var innerTextArr = [];
            var root = document.getElementById(node);
            var getChild = function (node) {
                var childs = node.childNodes;
                for (var i = 0; i < childs.length; i++)
                    if (childs[i].nodeType == 3)
                        innerTextArr.push(childs[i].nodeValue);
                    else if (childs[i].nodeType == 1) {
                        getChild(childs[i]);
                    }
            }
            getChild(root);
            return innerTextArr;
        }
        window.onload = function () {
            var _ul = document.getElementById('oUl');
            var _li = _ul.getElementsByTagName('li');
            var _total = 0;
            for (var i = 0, l = _li.length; i < l; i++) {
                var _img = _li[i].getElementsByTagName('img')[0];
                
                _img.onclick = function () {
                    var _spans = this.parentNode.getElementsByTagName('span');
                    var _js = parseInt(_spans[0].innerText);
                    _spans[0].innerText = _js + 1;
                    var _cs = parseInt(_spans[1].innerText);
                    _spans[2].innerText = (_js + 1) * _cs;
                    _total += _cs;
                    document.getElementById('hj').value = _total;
                }

            }

        };
        function dcExcel() {
            var doc = document;
            var _ul = doc.getElementById('oUl');
            var _li = _ul.getElementsByTagName('li');
            var _jsonstr = "";
            var _total = 0;
            for (var i = 0, l = _li.length; i < l; i++) {
                var _img = _li[i].getElementsByTagName('img')[0];
                _jsonstr += ",{";
                _jsonstr += '"img":"' + _img.getAttribute("src") + '"';
                
                
                
                    var _spans = _img.parentNode.getElementsByTagName('span');
                    var _js = parseInt(_spans[0].innerText);
                    //_spans[0].innerText = _js + 1;
                    _jsonstr += ',"num":"' + _js + '"';

                    var _cs = parseInt(_spans[1].innerText);
                    _jsonstr += ',"dj":"' + _cs + '"';
                    
                    //_spans[2].innerText = (_js + 1) * _cs;                    
                    _jsonstr += ',"hj":"' + (_js * _cs) + '"';
                    _total += _cs;
                    //doc.getElementById('hj').value = _total;
                    _jsonstr += "}";

                }
                //alert(_jsonstr);
                document.getElementById("txt_excel").value = encodeURIComponent("[" + _jsonstr.substr(1) + "]");
            //document.getElementById("txt_excel").value = encodeURIComponent(document.getElementById("divDC").innerHTML);
        }
    </script>

</head>
<body>
<form method="post" runat="server" action="dc.aspx">
<textarea id="txt_excel" name="txt_excel" style="display:none;"></textarea>
    <input type="submit" value="Excel导出" onclick="dcExcel();" />
    </form>
    <div id="divDC">
    合计:<input type="text" id="hj" value="0" readonly="readonly" />
    <input type="button" value="清空" onclick="location.reload()" />
    <ul id="oUl">
        <li>
            <img src='newimage/1.jpg' alt='1' />
            <span>0</span> <span>3</span> <span></span></li>
        <li>
            <img src='newimage/1.jpg' alt='2' />
            <span>0</span> <span>5</span> <span></span></li>
        <li>
            <img src='newimage/1.jpg' alt='3' />
            <span>0</span> <span>6</span> <span></span></li>
        <li>
            <img src='newimage/1.jpg' alt='4' />
            <span>0</span> <span>9</span> <span></span></li>
        <li>
            <img src='newimage/1.jpg' alt='5' />
            <span>0</span> <span>7</span> <span></span></li>
        <li>
            <img src='newimage/1.jpg' alt='6' />
            <span>0</span> <span>2</span> <span></span></li>
    </ul>
    </div>
</body>
</html>
dc.aspx

using System;
using System.Web;
using System.Data;
using System.IO;
using Excel = Microsoft.Office.Interop.Excel;
using System.Reflection;
using System.Diagnostics;
using Newtonsoft.Json;


public partial class dc : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        string _productsInfo = Server.UrlDecode(Request.Form["txt_excel"]);
        JavaScriptArray javascript = (JavaScriptArray)JavaScriptConvert.DeserializeObject(_productsInfo);
        DataTable dt = new DataTable();
        dt.Columns.Add(new DataColumn("img", typeof(System.String)));
        dt.Columns.Add(new DataColumn("num", typeof(System.String)));
        dt.Columns.Add(new DataColumn("dj", typeof(System.String)));
        dt.Columns.Add(new DataColumn("hj", typeof(System.String)));
        if (javascript.Count > 0)
        {
            DataRow dr;
            foreach (JavaScriptObject obj in javascript)
            {
                dr = dt.NewRow();
                dr["img"] = obj["img"].ToString();
                dr["num"] = obj["num"].ToString();
                dr["dj"] = obj["dj"].ToString();
                dr["hj"] = obj["hj"].ToString();
                dt.Rows.Add(dr);
            }
        }
        btntoexcel_Click(dt);
        //byte[] bytes = System.Text.Encoding.Default.GetBytes(str);
        
        //string fileName = strName;//客户端保存的文件名
        //string filePath = Server.MapPath(strPath);//路径 
        ////以字符流的形式下载文件
        //FileStream fs = new FileStream(filePath, FileMode.Open);
        //byte[] bytes = new byte[(int)fs.Length];
        //fs.Read(bytes, 0, bytes.Length);
        //fs.Close();
        /*
        Response.ContentType = "application/octet-stream";
        //通知浏览器下载文件而不是打开
        Response.AddHeader("Content-Disposition", "attachment;  filename=" + 
            HttpUtility.UrlEncode(DateTime.Now.ToShortTimeString() + ".txt", System.Text.Encoding.UTF8));
        Response.BinaryWrite(bytes);
        Response.Flush();
        Response.End();
        */








        /*
        NPOI.HSSF.UserModel.HSSFWorkbook book = new NPOI.HSSF.UserModel.HSSFWorkbook();
        NPOI.SS.UserModel.Sheet sheet = book.CreateSheet("order");
        
        NPOI.SS.UserModel.Row row = sheet.CreateRow(0);
        //订单表设置标题
        row.CreateCell(0).SetCellValue(str);
        

        System.IO.MemoryStream ms = new System.IO.MemoryStream();
        book.Write(ms);
        HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename=Order_" + DateTime.Now.ToString("yyyy-MM-dd") + ".xls"));
        HttpContext.Current.Response.BinaryWrite(ms.ToArray());
        book = null;
        ms.Close();
        ms.Dispose();
        */
    }

    #region 导出
    private void btntoexcel_Click(System.Data.DataTable dt)
    {
        if (dt != null)
        {
            #region 操作excel
            Excel.Workbook xlWorkBook;
            Excel.Worksheet xlWorkSheet;
            xlWorkBook = new Excel.Application().Workbooks.Add(Type.Missing);
            xlWorkBook.Application.Visible = false;
            xlWorkSheet = (Excel.Worksheet)xlWorkBook.Sheets[1];
            //设置标题
            xlWorkSheet.Cells[1, 1] = "数量";
            xlWorkSheet.Cells[1, 2] = "单价";
            xlWorkSheet.Cells[1, 3] = "合计";
            xlWorkSheet.Cells[1, 4] = "图片";
            //设置宽度            
            ((Excel.Range)xlWorkSheet.Cells[1, 2]).ColumnWidth = 15;
            ((Excel.Range)xlWorkSheet.Cells[1, 4]).ColumnWidth = 50;//图片的宽度

            //设置字体
            xlWorkSheet.Cells.Font.Size = 12;
            xlWorkSheet.Cells.Rows.RowHeight = 100;
            #region 为excel赋值
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                //为单元格赋值。
                xlWorkSheet.Cells[i + 2, 1] = dt.Rows[i]["num"].ToString();
                xlWorkSheet.Cells[i + 2, 2] = dt.Rows[i]["dj"].ToString();
                xlWorkSheet.Cells[i + 2, 3] = dt.Rows[i]["hj"].ToString();

                #region
                //可以直接取图片的地址
                string filename = Server.MapPath("~/" + dt.Rows[i]["img"].ToString());
                //也可以用下面的方法把图片从数据库里取出来。
                //byte[] filedata = (byte[])dtimg.Rows[j]["img"];
                //System.IO.MemoryStream ms = new System.IO.MemoryStream(filedata);
                //System.Drawing.Image img = System.Drawing.Image.FromStream(ms);
                //img.Save(filename);
                #endregion
                //int rangeindex = i+1;
                //string rangename = "D" + rangeindex;
                //Excel.Range range = xlWorkSheet.get_Range(rangename, Type.Missing);
                //range.Select();
                //Excel.Pictures pict = (Excel.Pictures)xlWorkSheet.Pictures(Type.Missing);
                //pict.Insert(filename, Type.Missing);

                //Left , Top , Width and Height.
                xlWorkSheet.Shapes.AddPicture(filename, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoCTrue,
                    220, 100 + i * 100, 100, 100);


            }
            #endregion
            #region 保存excel文件
            string _sj = DateTime.Now.ToString("yyyyMMddHHmmss");
            string filePath = Server.MapPath("/") + _sj + "导出.xls";
            xlWorkBook.SaveAs(filePath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
            xlWorkBook.Application.Quit();
            xlWorkSheet = null;
            xlWorkBook = null;
            GC.Collect();
            System.GC.WaitForPendingFinalizers();
            #endregion
            #endregion
            KillProcessexcel("EXCEL");

            #region 导出到客户端
            /*
            Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
            Response.AppendHeader("content-disposition", "attachment;filename=" + System.Web.HttpUtility.UrlEncode("导出", System.Text.Encoding.UTF8) + ".xls");
            Response.ContentType = "Application/excel";
            Response.WriteFile(filePath);
            Response.End();
            */
            #endregion

            Response.ContentType = "application/octet-stream";
            //通知浏览器下载文件而不是打开
            Response.AddHeader("Content-Disposition", "attachment;  filename=" + HttpUtility.UrlEncode(filePath, System.Text.Encoding.UTF8));
            //Response.BinaryWrite(bytes);
            Response.WriteFile(filePath);
            Response.Flush();

            File.Delete(filePath);

            Response.End();
        }
    }
    #endregion
    #region 杀死进程
    private void KillProcessexcel(string processName)
    { //获得进程对象,以用来操作
        System.Diagnostics.Process myproc = new System.Diagnostics.Process();
        //得到所有打开的进程
        try
        {
            //获得需要杀死的进程名
            foreach (Process thisproc in Process.GetProcessesByName(processName))
            { //立即杀死进程
                thisproc.Kill();
            }
        }
        catch (Exception Exc)
        {
            throw new Exception("", Exc);
        }
    }
    #endregion
}

 

posted @ 2013-12-30 11:25  一千零一夜  阅读(1220)  评论(0编辑  收藏  举报