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 }