//导入数据
public ActionResult ExpressInfoImport()
{
var ptcp = new BaseResponse() { DoFlag = true, DoResult = "Success" };
var file = Request.Files["files"];
if (file == null)
{
ptcp.DoFlag = false;
ptcp.DoResult = "请选择上传文件";
goto ovr;
}
try
{
var filename = Path.GetFileName(file.FileName);
if (string.IsNullOrEmpty(filename))
{
ptcp.DoFlag = false;
ptcp.DoResult = "请选择上传文件"; goto ovr; }
var filesize = file.ContentLength;//获取上传文件的大小单位为字节byte
var fileEx = Path.GetExtension(filename);//获取上传文件的扩展名
var noFileName = Path.GetFileNameWithoutExtension(filename);//获取无扩展名的文件名
var maxSize = * ;//定义上传文件的最大空间大小为4M
var fileType = ".xls,.xlsx";//定义上传文件的类型字符串 var fileName = noFileName + "_" + System.Guid.NewGuid() + fileEx;
if (!fileType.Contains(fileEx))
{
ptcp.DoFlag = false;
ptcp.DoResult = "文件类型不对,只能导入xls和xlsx格式的文件"; goto ovr;
}
if (filesize >= maxSize)
{
ptcp.DoFlag = false;
ptcp.DoResult = "上传文件超过4M,不能上传"; goto ovr;
}
var url = Configurator.JsonServiceUrl("UploadFile");
if (!Directory.Exists(url))//如果不存在就创建file文件夹
{
Directory.CreateDirectory(url);
}
var virtualPath = string.Format("{0}{1}", url, fileName);
// 文件系统不能使用虚拟路径
file.SaveAs(virtualPath); //读取文件内容,循环处理
var stream = new FileStream(virtualPath, FileMode.Open);
var dataTable = ExcelHelper.GetInstance().ReadExcelToDataTable(stream);
var list = new List<ExpressImportModel>();
try
{
foreach (DataRow dr in dataTable.Rows)
{
var sysNo = dr["SysNo"];
var orderCode = dr["订单号"];
var logiscticNo = dr["物流单号"];
var sugges = dr["处理建议"];
list.Add(new ExpressImportModel()
{
SysNo = Convert.ToInt32(sysNo),
OrderCode = orderCode.ToString(),
LogiscticNo = logiscticNo.ToString(),
Suggest = sugges.ToString()
});
}
}
catch (Exception e)
{
ptcp.DoFlag = false;
ptcp.DoResult = "导入格式不正确:e" + e.Message; goto ovr;
}
if (!list.Any())
{
ptcp.DoFlag = false;
ptcp.DoResult = "导入内容为空"; goto ovr;
} var response = ExpressClient.Instance.ImportHandleInfo(list);
ptcp.DoFlag = response.DoFlag;
ptcp.DoResult = response.DoResult;
if (response.ErrDtos.Any())
{
var errStr = new StringBuilder();
foreach (var item in response.ErrDtos)
{
errStr.AppendFormat(@"SysNo_{0}_OrderCode{1}_LogiscticNo{2}导入错误:{3} <br/>", item.SysNo,
item.OrderCode, item.LogiscticNo, item.ErrReason);
}
ptcp.DoResult = "以下导入出现错误:<br/>" + errStr.ToString();
}
}
catch (Exception ex)
{
ptcp.DoFlag = false;
ptcp.DoResult = ex.ToString();
} ovr:
ViewBag.Result = ptcp;
return View("Export/Export");
}
        /// <summary>
/// 读取Excel文件转化为DataTable
/// </summary>
/// <param name="stream"></param>
/// <returns></returns>
public DataTable ReadExcelToDataTable(Stream stream)
{
DataTable dt = new DataTable();
workBook = new HSSFWorkbook(stream);
workSheet = workBook.GetSheetAt();
IEnumerator rows = workSheet.GetRowEnumerator();
rows.MoveNext();
HSSFRow row = (HSSFRow)rows.Current;
for (int i = ; i < workSheet.GetRow().LastCellNum; i++)
{
dt.Columns.Add(row.GetCell(i).StringCellValue);
}
while (rows.MoveNext())
{
row = (HSSFRow)rows.Current;
DataRow dr = dt.NewRow();
for (int i = ; i < row.LastCellNum; i++)
{
ICell cell = row.GetCell(i);
if (cell != null)
{
dr[i] = cell.ToString();
}
else
{
dr[i] = null;
}
}
dt.Rows.Add(dr);
}
return dt;
}

导出:

       [HttpPost]
[MultipleButton(Name = "action", Argument = "ExpressInfoExport")]
public ActionResult ExpressInfoExport(ExpressInfoRefer refer)
{
refer.PageIndex = ;
refer.PageSize = int.MaxValue;
var result = ExpressClient.Instance.QueryExpressInfoPageList(refer);
if (result.List == null || !result.List.Any())
{
return View("Error");
}
var dicProperties = new Dictionary<string, string>();
dicProperties.Add("SysNo", "SysNo");
dicProperties.Add("OrderCode", "订单号");
dicProperties.Add("LogiscticNo", "物流单号");
dicProperties.Add("LogiscticId", "配送商ID");
dicProperties.Add("LogiscticCompanyName", "快递公司");
dicProperties.Add("OrderStatusContent", "订单扭转");
dicProperties.Add("LogiscticContent", "物流信息");
dicProperties.Add("LogisticOuterContent", "国际物流");
dicProperties.Add("CallTypeDesc", "对接方式");
dicProperties.Add("SubscribeStatusDesc", "订阅状态");
dicProperties.Add("SubscribeCount", "订阅次数");
dicProperties.Add("CallCount", "总调用(推送)次数");
dicProperties.Add("LastStatusDesc", "运单状态");
dicProperties.Add("PushRequestMessage", "快递100消息");
dicProperties.Add("RequestFaildReason", "订阅失败原因");
dicProperties.Add("OrderTypeDesc", "订单类型");
dicProperties.Add("RowCreateDate", "创建日期");
dicProperties.Add("Remark", "备注");
dicProperties.Add("HandleSuggest", "处理建议"); ExcelHelper.GetInstance().WriteListToExcel(result.List, dicProperties, "物流信息列表");
return null;
}
    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
public string Name { get; set; }
public string Argument { get; set; } public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
var isValidName = false;
var keyValue = string.Format("{0}:{1}", Name, Argument);
var value = controllerContext.Controller.ValueProvider.GetValue(keyValue); if (value != null)
{
controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
isValidName = true;
} return isValidName;
}
}
        /// <summary>
/// 导出Excel
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="list">数据结果List</param>
/// <param name="dicProperties">以字段-名称的形式</param>
/// <param name="fileName">导出文件名</param>
public void WriteListToExcel<T>(List<T> list, Dictionary<string, string> dicProperties, string fileName) where T : class
{
var size = ;
var count = list.Count / size;
if (list.Count%size != )
{
count += ;
}
workBook = new HSSFWorkbook();
ms = new MemoryStream();
fileName = fileName == "" ? "导出Excel" : fileName;
//fileName不能包含 : / \ ? * [ ]等特殊字符
for (int a = ; a < count; a++)
{
#region 创建sheet workSheet = workBook.CreateSheet(fileName+(a+)); DataTable dt = new DataTable();
if (dicProperties.Count > && list.Count > )
{
Type type = typeof(T);
foreach (KeyValuePair<string, string> property in dicProperties)
{
//建立DataTable表头
dt.Columns.Add(new DataColumn(property.Value));
}
foreach (T t in list.Skip(size*a).Take(size))
{
DataRow dr = dt.NewRow();
int i = ;
foreach (KeyValuePair<string, string> property in dicProperties)
{
PropertyInfo pi = type.GetProperty(property.Key);
object obj = pi.GetValue(t, null);
//为DataTable表内容赋值
dr[i] = obj == null ? "" : obj.ToString();
i++;
}
dt.Rows.Add(dr);
} CreateExcel(dt, dicProperties); }
#endregion
}
WriteToExcel(fileName); }
        private void CreateExcel(DataTable dt, Dictionary<string, string> dicProperties)
{
IRow rowExcel;
ICell cellExcel;
int rowIndex = ; rowExcel = workSheet.CreateRow(rowIndex);
int intColumn = ; foreach (KeyValuePair<string, string> dicProperty in dicProperties)
{
cellExcel = rowExcel.CreateCell(intColumn);
cellExcel.SetCellValue(dicProperty.Value);
++intColumn;
} foreach (DataRow row in dt.Rows)
{
++rowIndex;
rowExcel = workSheet.CreateRow(rowIndex);
int intColumnContent = ;
foreach (KeyValuePair<string, string> property in dicProperties)
{
cellExcel = rowExcel.CreateCell(intColumnContent);
cellExcel.SetCellValue(row[property.Value].ToString());
++intColumnContent;
}
}
}
        /// <summary>
/// 导出Excel文件
/// </summary>
/// <param name="fileName"></param>
private void WriteToExcel(string fileName)
{
workBook.Write(ms);
ms.Flush();
ms.Position = ;
workBook = null;
HttpContext current = HttpContext.Current;
current.Response.ContentType = "application/ms-excel";
current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + fileName + ".xls"); current.Response.BinaryWrite(ms.ToArray());
current.Response.End();
ms.Close();
ms = null;
}

Excel导入导出,通过datatable转存(篇一)的更多相关文章

  1. ASP.NET 之 常用类、方法的超级总结,并包含动态的EXCEL导入导出功能,奉上类库源码

    实用类:UtilityClass 包含如下方法 判断对象是否为空或NULL,如果是空或NULL返回true,否则返回false 验证手机号是否正确 13,15,18 验证邮箱 验证网址 MD5加密,返 ...

  2. Excel导入导出的业务进化场景及组件化的设计方案(上)

    1:前言 看过我文章的网友们都知道,通常前言都是我用来打酱油扯点闲情的. 自从写了上面一篇文章之后,领导就找我谈话了,怕我有什么想不开. 所以上一篇的(下)篇,目前先不出来了,哪天我异地二次回忆的时候 ...

  3. Excel导入导出帮助类

    /// <summary>    /// Excel导入导出帮助类    /// 记得引入 NPOI    /// 下载地址   http://npoi.codeplex.com/rele ...

  4. Mego(04) - NET简单实现EXCEL导入导出

    前言 相信做过信息系统的朋友都会遇到EXCEL导入导出的相关开发,做过不少EXCEL导入导出后总结起来大致有如下几种方式实现: ADO.NET的OldDb或ODBC连接EXCEL使用DataTable ...

  5. JeeSite中Excel导入导出

    在各种管理系统中,数据的导入导出是经常用到的功能,通常导入导出以Excel.CSV格式居多.如果是学习的过程中,最好是自己实现数据导入与导出的功能,然而在项目中,还是调用现成的功能比较好.近期一直使用 ...

  6. java jxl excel 导入导出的 总结(建立超链接,以及目录sheet的索引)

    最近项目要一个批量导出功能,而且要生成一个单独的sheet页,最后后面所有sheet的索引,并且可以点击进入连接.网上搜索了一下,找到一个方法,同时把相关的excel导入导出操作记录一下!以便以后使用 ...

  7. Java Excel 导入导出(一)

    本文主要描述通过java实现Excel导入导出 一.读写Excel三种常用方式 1.JXL——Java Excel开放源码项目:读取,创建,更新 2.POI——Apache POI ,提供API给Ja ...

  8. 利用反射实现通用的excel导入导出

    如果一个项目中存在多种信息的导入导出,为了简化代码,就需要用反射实现通用的excel导入导出 实例代码如下: 1.创建一个 Book类,并编写set和get方法 package com.bean; p ...

  9. 关于Excel导入导出的用例设计

    目前,为方便操作,很多系统都会增加批量导入导出的功能.文件导入导出一般格式都是excel.由于用户直接在excel在填写内容,无法控制填写的格 式,加上excel解析比较困难,所以一般涉及到excel ...

  10. 一个基于POI的通用excel导入导出工具类的简单实现及使用方法

    前言: 最近PM来了一个需求,简单来说就是在录入数据时一条一条插入到系统显得非常麻烦,让我实现一个直接通过excel导入的方法一次性录入所有数据.网上关于excel导入导出的例子很多,但大多相互借鉴. ...

随机推荐

  1. Access restriction: The type 'RSACipher' is not API

    解决方法: http://stackoverflow.com/questions/860187/access-restriction-on-class-due-to-restriction-on-re ...

  2. 初涉Linux ----------> Ubuntu15.04的安装与美化

     “你玩 Linux 吗?” “什么 Linux ?” “你连 Linux 都不知道?还说是学计算机的呢...”  “干嘛要用 Linux 啊?windows多好,Linux?没兴趣” 一.  前言 ...

  3. Redhat使用CentOS的Yum 网络源

    Redhat 的更新包只对注册的用户生效,所以我们自己手动更改成CentOS 的更新包,CentOS几乎和redhat是一样的. 1.首先查看redhat 7.0系统本身所安装的那些yum 软件包:[ ...

  4. [转]jquery开发自定义的插件总结

    本文转自:http://www.cnblogs.com/Jimmy009/archive/2013/01/17/jquery%E6%8F%92%E4%BB%B6.html 前几天在玩jquery,今天 ...

  5. [转]C#网络编程(异步传输字符串) - Part.3

    本文转自:http://www.tracefact.net/CSharp-Programming/Network-Programming-Part3.aspx 这篇文章我们将前进一大步,使用异步的方式 ...

  6. Java Web之请求和响应

    Servlet最主要作用就是处理客户端请求并作出回应,为此,针对每次请求,Web容器在调用service()之前都会创建两个对象,分别是HttpServletRequest和HttpServletRe ...

  7. NOIP2002矩形覆盖[几何DFS]

    题目描述 在平面上有 n 个点(n <= 50),每个点用一对整数坐标表示.例如:当 n=4 时,4个点的坐标分另为:p1(1,1),p2(2,2),p3(3,6),P4(0,7),见图一. 这 ...

  8. NOIP2007矩阵取数[DP|高精度]

    题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2. ...

  9. jsp前三章小测试:错题

    /bin:存放各种平台下用于启动和停止Tomcat的脚本文件 /logs:存放Tomcat的日志文件 /webapps:web应用的发布目录 /work:Tomcat把由JSP生成的Servlet存放 ...

  10. Unity打包同一文件Hash不一样

    问题起因 游戏开发基本都会涉及到资源版本管理及更新,本文记录我在打包过程中遇到的一小问题: 开过中常用于标记资源版本的方法有计算文件Hash.VCS的版本等. 在Unity中对同一个资源文件进行多次打 ...