插件:Aspose.Cells

没有安装office插件也能使用;

导出:不能使用ajax异步·

        /// <summary>
/// 导出试题
/// </summary>
/// <param name="userId">用户Id</param>
/// <param name="courseId">课程Id</param>
/// <returns></returns>
[HttpGet]
public FilePathResult ExportQuestions(int userId, int courseId)
{
// 工作薄
Workbook BuildReport_WorkBook = new Workbook();
//sheets集合
Worksheets sheets = BuildReport_WorkBook.Worksheets;
//试题表
Worksheet BuildReport_WorkSheet = BuildReport_WorkBook.Worksheets[]; // sheet1
BuildReport_WorkBook.Worksheets[].Name = "试题表";
BuildReport_WorkSheet.FreezePanes(, , , ); //冻结第一行
BuildReport_WorkSheet.AutoFitColumns();//让各列自适应宽度
Cells BuildReportCells = BuildReport_WorkSheet.Cells; //单元格 //表头
BuildReportCells[, ].PutValue("试题Id");
BuildReportCells[, ].PutValue("课程Id");
BuildReportCells[, ].PutValue("试题类型"); //第二个sheet
BuildReport_WorkBook.Worksheets.Add("试题描述");
Worksheet BuildReport_WorkSheet_Desc = BuildReport_WorkBook.Worksheets["试题描述"]; //sheet2
BuildReport_WorkSheet_Desc.FreezePanes(, , , ); //冻结第一行
Cells BuildReportCells_Desc = BuildReport_WorkSheet_Desc.Cells; //表头
BuildReportCells_Desc[, ].PutValue("试题描述Id");
BuildReportCells_Desc[, ].PutValue("试题Id");
BuildReportCells_Desc[, ].PutValue("试题描述");
BuildReportCells_Desc[, ].PutValue("试题解析");
BuildReportCells_Desc[, ].PutValue("试题描述(不包含html字符)"); //列
BuildReportCells[i, ].PutValue(item.Id);
BuildReportCells[i, ].PutValue(item.CourseId);
BuildReportCells[i, ].PutValue(item.QuestionType); BuildReportCells_Desc[j, ].PutValue(questionDesc.ID);
BuildReportCells_Desc[j, ].PutValue(questionDesc.QuestionId);
BuildReportCells_Desc[j, ].PutValue(questionDesc.Description);
BuildReportCells_Desc[j, ].PutValue(questionDesc.Analyses); //文件路径
string fileDirPath = "/Downloads/试题" + userId + "_" + courseId;
string downPath = Server.MapPath(fileDirPath);
if (!Directory.Exists(downPath))
{
Directory.CreateDirectory(downPath);
}
System.IO.File.SetAttributes(downPath, FileAttributes.Normal); string nowTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string tempFile = Path.GetTempFileName();
string saveFile = Server.MapPath(fileDirPath + "/" + "试题" + "_" + userId + "_" + courseId + ".xls");
BuildReport_WorkBook.Save(saveFile); return File(saveFile, "application/octet-stream", "试题" + "_" + userId + "_" + courseId + ".xls");
}

导出

导入: view,

需要注意2个问题:
1. 注意给form表单加上enctype = "multipart/form-data" 属性,否则会导致Action的参数HttpPostedFileBase 对象接收不到文件。
2. 注意文件大小,IIS中默认上传的文件大小为4MB ,超过这大小的文件需要在修改配置文件。
 

<div  style="display:none" >
<div id="divImportQuestions" class="easyui-dialog" title="导入试题" closed="true" style="width:400px;height:200px;padding:10px;" data-options="iconCls:'icon-save',modal:true">
@using (Html.BeginForm("ImportQuestions", "ManageCourse", FormMethod.Post, new { enctype = "multipart/form-data", id = "frmImport" }))
{
<input id="fileImport" type="file" name="fileImport" />
<div style="padding:5px;text-align:center;">
<a id="btnCommit" href="javascript:void(0);" onclick="ImportQuestions()" class="easyui-linkbutton" iconcls="icon-ok">确 定</a>
<a href="javascript:void(0);" onclick="top.ClosedlgWindow();" class="easyui-linkbutton" iconcls="icon-cancel">取 消</a>
</div>
<input id="hidUserId" type="hidden" name="hidUserId" />
<input id="hidCourseId" type="hidden" name="hidCourseId" />
<input id="hidUserName" type="hidden" name="hidUserName" />
}
@*<form id="frmImport" action="/admin/ManageCourse/ImportQuestions" method="post" enctype="multipart/form-data">
<input id="fileImport" type="file" name="fileImport" />
<div style="padding:5px;text-align:center;">
<a id="btnCommit" href="javascript:void(0);" onclick="ImportQuestions()" class="easyui-linkbutton" iconcls="icon-ok">确 定</a>
<a href="javascript:void(0);" onclick="top.ClosedlgWindow();" class="easyui-linkbutton" iconcls="icon-cancel">取 消</a>
</div>
<input id="hidUserId" type="hidden" name="hidUserId" />
<input id="hidCourseId" type="hidden" name="hidCourseId" />
</form>*@
</div>
</div>

导入: controller

/// <summary>
/// 导入试题
/// </summary>
/// <param name="userId">用户Id</param>
/// <param name="courseId">课程Id</param>
/// <returns>int userId, int courseId,</returns>
[HttpPost]
public ActionResult ImportQuestions(HttpPostedFileBase upFileBase)
{
HttpPostedFileBase fileBase = Request.Files["fileImport"];
if (fileBase != null)
{
#region 保存文件 string fileName = Path.GetFileName(fileBase.FileName);
string fileNameNoExt = Path.GetFileNameWithoutExtension(fileBase.FileName);
string extension = Path.GetExtension(fileName);
//if (extension.ToLower() != ".zip") //extension.ToLower() != ".xls" || extension.ToLower() != ".xlsx" ||
//{
// //window.location.href='@Url.Action('a','b')'
// return Content("<script type='text/javascript'>alert('请上传zip格式的压缩文件');window.location.href='/admin/ImportQuestions';</script>");
//} string filePath = "/UploadFile/试题/"; // +DateTime.Now.ToString("yyyyMMdd") + "/"; if (!Directory.Exists(Server.MapPath(filePath))) //文件夹
{
Directory.CreateDirectory(Server.MapPath(filePath));
}
string nowTime = DateTime.Now.ToString("yyyyMMddHHmmssfff");
string fullFileName = Server.MapPath(filePath + nowTime + "_" + userId + "_" + courseId + "_" + fileName);//文件名
fileBase.SaveAs(fullFileName); //保存在服务器 #endregion string fileFullName = Path.Combine(strFileUrl, Path.GetFileName(file.Name)); #region 导入EXECL Workbook BuildReport_WorkBook = new Workbook();
BuildReport_WorkBook.Open(fileFullName); Worksheets sheets = BuildReport_WorkBook.Worksheets; //试题表
Worksheet workSheetQuestion = BuildReport_WorkBook.Worksheets["试题表"]; // sheet1
Cells cellsQuestion = workSheetQuestion.Cells; //单元格
Worksheet workSheetDesc = BuildReport_WorkBook.Worksheets["试题描述"]; //sheet2
Cells cellsDesc = workSheetDesc.Cells; //试题表
for (int i = ; i < cellsQuestion.MaxDataRow + ; i++)
{
#region 试题表 Question modQuestion = new Question();//实体
int questionId = cellsQuestion[i, ].IntValue;
dicQuestion[i] = cellsQuestion[i, ].IntValue;
modQuestion.CourseId = cellsQuestion[i, ].IntValue;
modQuestion.QuestionType = cellsQuestion[i, ].IntValue; //数据库操作 } for (int j = ; j < cellsDesc.MaxDataRow + ; j++)
{
int questionDescFK = cellsDesc[j, ].IntValue;
if (questionId == questionDescFK)
{
Question_Desc modQuestionDesc = new Question_Desc(); //实体
modQuestionDesc.QuestionId = questionIdNew; //新的
modQuestionDesc.Description = cellsDesc[j, ].StringValue.Trim();
modQuestionDesc.Analyses = cellsDesc[j, ].StringValue.Trim();
modQuestionDesc.DescriptionText = cellsDesc[j, ].StringValue.Trim(); //数据库操作
}
} #endregion } return View();
}

导入Controller

● 由于接收多个文件,所以控制器方法的参数变成了IEnumerable<HttpPostedFileBase> files
● 变量files与前台视图的name属性值对应
● 如果没有指定的文件夹,就创建一个文件夹

为什么使用HttpPostedFileBase而不是FormCollection来接收文件

public sealed class FormCollection : NameValueCollection, IValueProvider

可见,FormCollection是键值集合,键是string类型,值是string类型,而上传的文件类型不是string,所以不能用FormCollection作为参数来接收文件。

参考资料:
 

MVC中的文件上传http://blog.sina.com.cn/s/blog_75a555e40101q8i7.html

 
Confusing required maxRequestLength and maxAllowedContentLength settings
 
关于MVC4.0 WebAPI上传图片重命名以及图文结合
 
ASP.NET Web Api Self Host大文件上传功能
 
 
首发地址:http://www.yuanxj.net/2014/02/upladfile/

Aspose.Cells导入导出execl的更多相关文章

  1. Aspose.Cells 导入导出EXCEL(转)

    Aspose.Cells 导入导出EXCEL      修改样式        Workbook workbook = new Workbook(); //工作簿          Worksheet ...

  2. NPOI、MyXls、Aspose.Cells 导入导出Excel(转)

    Excel导入及导出问题产生: 从接触.net到现在一直在维护一个DataTable导s出到Excel的类,时不时还会维护一个导入类.以下是时不时就会出现的问题: 导出问题: 如果是asp.net,你 ...

  3. C# WinForm使用Aspose.Cells.dll 导出导入Excel/Doc 完整实例教程

    1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 Aspose C# 导出Excel 实例”一文中的 ...

  4. Aspose.Cells.dll操作execl

    附件:Aspose.Cells.dll 1.创建execl(不需要服务器或者客户端安装office) public void DCExexl(DataTable dt) {  Workbook wb ...

  5. Asp.net & Aspose.cells 导入

    Workbook workBook = new Workbook(this.fuFile.FileContent); Aspose.Cells.Worksheet sheet = workBook.W ...

  6. 依赖Aspose.Cells Excel 导出

    public static void SaveExcel() { //新建工作簿 Workbook workbook = new Workbook(); //工作簿 Worksheet sheet = ...

  7. Aspose.Cells.dll引用导入导出Excel

    Aspose.Cells 导入导出EXCEL 文章出处:http://hi.baidu.com/leilongbing/item/c11467e1819e5417595dd8c1 修改样式       ...

  8. C# WinForm 导出导入Excel/Doc 完整实例教程[使用Aspose.Cells.dll]

    [csharp] view plain copy 1.添加引用: Aspose.Cells.dll(我们就叫工具包吧,可以从网上下载.关于它的操作我在“Aspose.Cells操作说明 中文版 下载 ...

  9. 【转】 (C#)利用Aspose.Cells组件导入导出excel文件

    Aspose.Cells组件可以不依赖excel来导入导出excel文件: 导入: public static System.Data.DataTable ReadExcel(String strFi ...

随机推荐

  1. Nginx部署静态页面及引用图片有效访问的两种方式

    nginx安装百度一下有很多,直接正题: 静态文件目录结构 file#文件位置 /home/service/file/ css js images html fonts 配置nginx.conf核心代 ...

  2. SSH—Struts2拦截器的应用(防止未登录用户进行操作)

    前言 类似于京东.淘宝这些平台,如果单纯的去浏览页面上的一些商品显示,一点问题都没有,但是当你点击商品的订单详情或者想查看一下自己的购物车,那么就会出现通过登录进去的界面,这个就是今天要说的这个拦截器 ...

  3. ubuntu14.04 搭建samba

        1.安装软件      sudo apt-get remove libwbclient0      sudo apt-get remove samba-common      sudo apt ...

  4. JavaBean简介和用法

    一.JavaBean的含义 JavaBean是使用Java语言开发的一个可重用组件,能使Html代码与JAVA代码分离,并节省开发时间,简单的说就是一个包含了setter和getter以及至少一个无参 ...

  5. python统计字符串中字符个数

    str = "xxx" result = {} for i in set(str):#set将字符串转为集合对象,用于去重,减少计算量 result[i] = str.count( ...

  6. 毕业设计 python opencv实现车牌识别 形状定位

    主要代码参考https://blog.csdn.net/wzh191920/article/details/79589506 GitHub:https://github.com/yinghualuow ...

  7. C#工具类之字符串扩展类

    /// <summary> /// 字典串帮忙类 /// </summary> public static class StringHelper { /// <summa ...

  8. 求js数组的最大值和最小值

    数组 ,,,,,,,,,]; 方法1 - 字符串拼接法 利用toString或join把数组转换为字符串,再和Math的max和min方法分别进行拼接,最后执行eval方法 var max = eva ...

  9. 简述wcf应用

    一.新建wcf 如下图:wcf可以简历俩种形式 1.库文件,就是一个类库文件,可以用windows服务或控制台开启. 2.服务应用程序,可以直接IIS上面发布. 二.库文件自动生成的类 接口类 usi ...

  10. shell read line

    cat >b <<EOF line1 line2 line3 EOF # 方法1 while read line do echo ${line} done < <(cat ...