ExportHandler.ashx
using KYZWeb.Common;
using Liger.Data;
//using Microsoft.Office.Interop.Excel;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Web;
namespace KYZWeb.Modules.DeviceMan
{
/// <summary>
/// ExportHandler 的摘要说明
/// </summary>
public class ExportHandler : IHttpHandler
{
public static DbContext DB = DbHelper.Db;
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
string startdatetime = context.Request.Params["startdatetime"];
string enddatetime = context.Request.Params["enddatetime"];
string user_name = context.Request.Params["user_name"];
StringBuilder sql = new StringBuilder();
sql.Append(@" select * ");
sql.Append(" from dbo.vi_card_run WHERE 1=1");
if (!string.IsNullOrEmpty(startdatetime))
{
sql.Append(" and card_datetime >= '" + startdatetime + "'");
}
if (!string.IsNullOrEmpty(enddatetime))
{
sql.Append(" and card_datetime <= '" + enddatetime + "'");
}
if (!string.IsNullOrEmpty(user_name))
{
sql.Append(" and user_name like '%" + user_name + "%'");
}
sql.Append(" order by card_datetime desc");
//创建command
var dt = DB.Db.ExecuteDataSet(CommandType.Text, sql.ToString()).Tables[0];
StringWriter sw = new StringWriter();
//sw.WriteLine("姓名\t工号\t打卡时间\t打卡地点\t打卡设备");
sw.WriteLine("<html xmlns:x=\"urn:schemas-microsoft-com:office:excel\">");
sw.WriteLine("<head>");
sw.WriteLine("<!--[if gte mso 9]>");
sw.WriteLine("<xml>");
sw.WriteLine(" <x:ExcelWorkbook>");
sw.WriteLine(" <x:ExcelWorksheets>");
sw.WriteLine(" <x:ExcelWorksheet>");
sw.WriteLine(" <x:Name>" + "sheetName" + "</x:Name>");
sw.WriteLine(" <x:WorksheetOptions>");
sw.WriteLine(" <x:Print>");
sw.WriteLine(" <x:ValidPrinterInfo />");
sw.WriteLine(" </x:Print>");
sw.WriteLine(" </x:WorksheetOptions>");
sw.WriteLine(" </x:ExcelWorksheet>");
sw.WriteLine(" </x:ExcelWorksheets>");
sw.WriteLine("</x:ExcelWorkbook>");
sw.WriteLine("</xml>");
sw.WriteLine("<![endif]-->");
sw.WriteLine("</head>");
sw.WriteLine("<body>");
sw.WriteLine("<table border='1'>");
sw.WriteLine(" <tr >");
sw.WriteLine(" <td><strong>姓名</strong></td>");
sw.WriteLine(" <td><strong>工号</strong></td>");
sw.WriteLine(" <td><strong>打卡时间</strong></td>");
sw.WriteLine(" <td><strong>打卡地点</strong></td>");
sw.WriteLine(" <td><strong>打卡设备</strong></td>");
sw.WriteLine(" </tr>");
foreach (DataRow dr in dt.Rows)
{
//sw.WriteLine(dr["user_name"] + "\t" + dr["user_code"] + "\t" + dr["card_datetime"]+"\t"+dr["card_address"]+"\t"+dr["card_device_name"]);
sw.WriteLine(" <tr>");
sw.WriteLine(" <td>" + dr["user_name"] + "</td>");
sw.WriteLine(" <td>" + dr["user_code"] + "</td>");
sw.WriteLine(" <td>" + dr["card_datetime"] + "</td>");
sw.WriteLine(" <td>" + dr["area_name"] + "</td>");
sw.WriteLine(" <td>" + dr["device_name"] + "</td>");
sw.WriteLine(" </tr>");
}
sw.WriteLine("</table>");
sw.WriteLine("</body>");
sw.WriteLine("</html>");
sw.Close();
context.Response.Clear();
context.Response.Buffer = true;
context.Response.Charset = "UTF-8";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + "card" + ".xls");
context.Response.ContentType = "application/ms-excel";
context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
context.Response.Write(sw);
context.Response.End();
//context.Response.ContentEncoding = System.Text.Encoding.GetEncoding("GB2312");
//context.Response.AddHeader("Content-Disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode("card", System.Text.Encoding.UTF8) + ".xls");
//context.Response.ContentType = "application/ms-excel";
//context.Response.Write(sw);
//context.Response.End();
//DataTabletoExcel(dt, "C:\\中国.XLS"); //调用自定义的函数,当然输出文件你可以随便写
}
public static void DataTabletoExcel(System.Data.DataTable tmpDataTable, string strFileName)
{
if (tmpDataTable == null)
return;
int rowNum = tmpDataTable.Rows.Count;
int columnNum = tmpDataTable.Columns.Count;
int rowIndex = 1;
int columnIndex = 0;
//Application xlApp = new ApplicationClass();
//xlApp.DefaultFilePath = "";
//xlApp.DisplayAlerts = true;
//xlApp.SheetsInNewWorkbook = 1;
//Workbook xlBook = xlApp.Workbooks.Add(true);
////将DataTable的列名导入Excel表第一行
//foreach (DataColumn dc in tmpDataTable.Columns)
//{
// columnIndex++;
// xlApp.Cells[rowIndex, columnIndex] = dc.ColumnName;
//}
////将DataTable中的数据导入Excel中
//for (int i = 0; i < rowNum; i++)
//{
// rowIndex++;
// columnIndex = 0;
// for (int j = 0; j < columnNum; j++)
// {
// columnIndex++;
// xlApp.Cells[rowIndex, columnIndex] = tmpDataTable.Rows[i][j].ToString();
// }
//}
////xlBook.SaveCopyAs(HttpUtility.UrlDecode(strFileName, System.Text.Encoding.UTF8));
//xlBook.SaveCopyAs(strFileName);
}
public bool IsReusable
{
get
{
return false;
}
}
}
}
ExportHandler.ashx的更多相关文章
- Visual Studio 2013 添加一般应用程序(.ashx)文件到SharePoint项目
默认,在用vs2013开发SharePoint项目时,vs没有提供一般应用程序(.ashx)的项目模板,本文解决此问题. 以管理员身份启动vs2013,创建一个"SharePoint 201 ...
- ashx中Response.ContentType的常用类型
ashx中Response.ContentType的常用类型: text/plaintext/htmltext/xmlapplication/jsonimage/GIFapplication/x-cd ...
- 一种开发模式:ajax + ashx + UserControl
一.ajax+ashx模式的缺点 在web开发过程中,为了提高网站的用户体验,或多或少都会用到ajax技术,甚至有的网站全部采用ajax来实现,大量使用ajax在增强用户体验的同时会带来一些负 ...
- 如何使用VS在SharePont 2013中插入ashx文件
http://www.lifeonplanetgroove.com/adding-and-deploying-generic-handlers-ashx-to-a-sharepoint-2010-vi ...
- 分享一个html+js+ashx+easyui+ado.net权限管理系统
EasyUI.权限管理 这是个都快被搞烂了的组合,但是easyui的确好用,权限管理在项目中的确实用.一直以来博客园里也不少朋友分享过,但是感觉好的要不没源码,要不就是过度设计写的太复杂看不懂,也懒得 ...
- 在一个aspx或ashx页面里进行多次ajax调用
在用ajax开发asp.net程序里.利用ashx页面与前台页面进行数据交互.但是每个ajax交互都需要一个ashx页面.结果是项目里一大堆ashx页面.使项目难以管理.现在我们就想办法让一个ashx ...
- 在ashx文件中制作验证码(使用session要继承IRequiresSessionState)
必须继承System.Web.SessionState.IRequiresSessionState接口,才能实现Session读写! System.Web.SessionState的一些接口 IRea ...
- jsonp跨域+ashx(示例)
前言 做B/S项目的时候,我们一般使用jquery+ashx来实现异步的一些操作,比如后台获取一些数据到前台,但是如果ashx文件不在本项目下,引用的是别的域下的文件,这时候就访问不了.关于jsonp ...
- ztree + ashx +DataTable +Oracle
问题描述 好久没有使用ztree了,刚才在使用ztree做导航时遇到了几个小问题: 1.返回数据源是undefined . 2.数据出现后树结构没有出现(pIdKey单词拼写错误). 3.在使用Ora ...
随机推荐
- 使用ssh登录kali
SSH为Secure Shell的缩写,SSH为建立在应用层基础上的安全协议.SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议.利用SSH协议可以有效防止远程管理过程中的信息泄露问题 ...
- Java线程和多线程(十五)——线程的活性
当开发者在应用中使用了并发来提升性能的同时,开发者也需要注意线程之间有可能会相互阻塞.当整个应用执行的速度比预期要慢的时候,也就是应用没有按照预期的执行时间执行完毕.在本章中,我们来需要仔细分析可能会 ...
- Ansible 简介
Ansible 是一个开源的基于 OpenSSH 的自动化配置管理工具.可以用它来配置系统.部署软件和编排更高级的 IT 任务,比如持续部署或零停机更新.Ansible 的主要目标是简单和易用,并且它 ...
- JVM加载类冲突,导致Mybatis查数据库返回NULL的一个小问题
今天碰到个bug,虽然小,但是有点意思 背景是SpringMVC + Mybatis的一个项目,mapper文件里写了一条sql 大概相当于 select a from tableA where b ...
- OO最后一次作业
终于开始最后一次作业了,是时候为这学期oo画一个圆满的局句号了. 回首这学期的OO经历,一路走来,经过了开始对面向对象的初步接触,然后就是充满痛苦回忆的多线程,接下来到了令人焦头烂额的规格设计,最后是 ...
- Centos 7 修改系统时区
timedatectl status Local time: 四 2014-12-25 10:52:10 CST Universal time: 四 2014-12-25 02:52:10 UTC R ...
- python-Selenium库的详解
一.什么是Selenium selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行 ...
- new、getInstance()、newInstance()、Class.forName()
1.对象使用之前通过getinstance()得到而不需要自己定义,用完之后不需要delete: 2.new 一定要生成一个新对象,分配内存:getInstance() 则不一定要再次创建,它可以把一 ...
- CPU-bound(计算密集型) 和I/O bound(I/O密集型)
概念 概念I/O系统,英文全称为“Input output system”,中文全称为“输入输出系统”,由输入输出控制系统和外围设备两部分组成,是计算机系统的重要组成部分.在计算机系统中,通常把处理器 ...
- c++入门之类——进一步剖析
通常的,关于一个类,包含了下面几个方面: 1 声明类成员和接口:2 定义类接口函数(方法)3通过接口调用类 下面先给出第一条:声明类成员和接口 # ifndef MYTIME0_H_ # defin ...