插件: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. 在OnRowDataBound或OnItemDataBound事件中获取字段值

    不管是在GridView,DataList还是Repeater控件中,其中Repeater控件,没有DataKeyNames或是DataKeyField属性,想获取记录的主键值,只好用Label或是H ...

  2. dubbo事件通知机制 (2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 142      * 反射执行xxxService.onthrow方法:至少要有一个入参且第一个入参类型为T ...

  3. thinkPHP3.2.3 框架

    3.2.3开发文档https://pan.baidu.com/disk/home?errno=0&errmsg=Auth%20Login%20Sucess&&bduss=&am ...

  4. 洛谷P5206 [WC2019] 数树(生成函数+容斥+矩阵树)

    题面 传送门 前置芝士 矩阵树,基本容斥原理,生成函数,多项式\(\exp\) 题解 我也想哭了--orz rqy,orz shadowice 我们设\(T1,T2\)为两棵树,并定义一个权值函数\( ...

  5. 牛客寒假算法基础集训营4 I Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I来源:牛客网 自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串. ...

  6. Linode安装环境

    Ubuntu 18 密码:Fenghaiyan35 netstat -plnt                           //查看所有文件 sudo apt-get install apac ...

  7. Ant junitreport with Maven

    大家可能都知道在Ant里可以使用junit和junitreport两个task来完成对测试结果生成HTML格式的报告. Maven里的Surefire-report的插件只能对Java测试报告支持的比 ...

  8. Charles使用方法简介

    Charles是一个web代理器,用来记录和展示你所发出和接收到的所有数据. 主要特性: SSL Proxying——易清晰地文本展示SSL请求和响应Bandwidth Throttling是用来模拟 ...

  9. day_11 生成器

    . 生成器本身是迭代器 .写迭代器的方式 .生成器函数 .生成器表达式 .各种推导式 .生成器函数 函数内部有yield, yield返回->return yield把函数分段进行 生成器可以使 ...

  10. 签名:实现参数字典排序,然后拼接为url参数形式

    在很多地方请求参数需要做处理例如: 步骤 1.参数字典排序. 2.拼接字符. /// <summary> /// 生成签名 /// </summary> /// <par ...