OpenXml是通过 XML 文档提供行集视图。由于OPENXML 是行集提供程序,因此可在会出现行集提供程序(如表、视图或 OPENROWSET 函数)的 Transact-SQL 语句中使用 OPENXML。

效果图:

使用它的时候,首选的下载安装这个程序集,下载地址:http://www.microsoft.com/en-us/download/details.aspx?id=30425

安装好了在项目当中引用如下2个

前台弹出框用的是 jBox这个js插件,我用了ajax请求的方式来上传js部分

function ImportExlDataGridRows() {
var html = "<form enctype=\"multipart/form-data\" method=\"post\"> <div style='padding:10px;'>请选择导入的文件:(*.xlsx) <a href=\"download.aspx?ParamValue=1\" rel=\"external\" style=\"color:#000; background:#CCC; width:80px; border:1px solid #09F\" >下载模板</a></div>";
html += "<div style='padding:10px;'><input type=\"file\" name=\"uploadImg\" id=\"uploadImg\" style=\" width:320px; border:1px solid #09F\" /></div>";
html += "</form> ";
var submit = function (v, h, f) {
//判断是否有选择上传文件
var imgPath = $("#uploadImg").val();
if (imgPath == "") {
alert("请选择导入的文件!");
return false;
}
//判断上传文件的后缀名
var strExtension = imgPath.substr(imgPath.lastIndexOf('.') + 1);
if (strExtension != 'xlsx' && strExtension != 'xls') {
alert("请选择导入的文件(*.xlsx)");
return false;
}
$.ajaxFileUpload(
{
url:window.location.href,
secureuri: false,
fileElementId: 'uploadImg',
dataType: 'json',
data:{ "method":"file"},
beforeSend: function () {
$.jBox.tip("正在加载导入", "loading");
},
complete: function () { },
success: function (data, status) {
//if (typeof (data.Success) != 'undefined') {
if (data.Success != '') {
$.jBox.tip(data.Msg);
}
// }
},
error: function (data, status, e) {
$.jBox.tip(e);
}
}
) return true;
}; $.jBox(html, { title: "导入预防性维修派单", submit: submit });
}

后台方法

/// <summary>
/// 导入exl
/// </summary>
public void FilePlanImport()
{
string pathWan = "";
try
{
//Web站点下,附件存放的路径
string strFileFolerInWebServer = ConfigurationManager.AppSettings["FileFolerInWebServer"];
HttpFileCollection files = Request.Files;
if (files.Count <=0) {
ResponseWriteSuccessORFail(false, "文件导入");
return;
}
HttpPostedFile postedFile = files[0];
//context.Request.Files["Filedata"];
string savepath = "";
savepath = Server.MapPath(strFileFolerInWebServer) + "\\";//实际保存文件夹路径
string filename = postedFile.FileName; string sNewFileName = "年度生产设备保养计划表_" + DateTime.Now.ToString("yyyyMMddhhmmss");
string sExtension = filename.Substring(filename.LastIndexOf('.'));
if (!Directory.Exists(savepath))
{
Directory.CreateDirectory(savepath);
}
pathWan=savepath + @"\" + sNewFileName + sExtension;
postedFile.SaveAs(pathWan); //保存到文件服务器上的名称 }
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message + ex.StackTrace);
ResponseWriteSuccessORFail(false, "文件导入");
return;
// context.Response.Write("Error: " + ex.Message);
}
DataTable data = null;
int errRows = 0;//
try
{ using (var document = SpreadsheetDocument.Open(pathWan, false))
{ var worksheet = document.GetWorksheet();
var rows = worksheet.Descendants<Row>().ToList();
var sharedStringTable = document.GetSharedStringTable(); // 读取Excel中的数据
IEnumerable<string> rowskey =
new string[] { "OUGUID","AccessoriesCategories" ,"AccessoriesSubclass" ,"MaintenanceMethod",
"Cycle" ,"CycleUnit","EffectiveDate" ,"ClosingDate","EarlyDays","WorkPermit","RepairBusiness"};
ExcelOpenXMLHelper.SetRows = rowskey;//这部分是需要读取那些字段
data = ExcelOpenXMLHelper.ReadExcelData(rows, sharedStringTable); foreach (DataRow item in data.Rows)
{ ....数据插入部分
} }
string msg = "文件导入成功:" + (data.Rows.Count - errRows) + ",错误:" + errRows;
ResponseWriteSuccessORFail(true, msg);
}
catch (Exception ex)
{
LogHelper.WriteLog(ex.Message + ex.StackTrace);
string msg = "文件导入成功:" + (data.Rows.Count - errRows) + ",错误:" + errRows;
ResponseWriteSuccessORFail(false, msg);
}
}

  ExcelOpenXMLHelper这是对OpenXml的一些操作封装成了helper类。

导出部分比较简单

/// <summary>
/// 导出Excel
/// </summary>
/// <param name="filePath">
/// The file path.
/// </param>
/// <param name="fileTemplatePath">
/// The file template path.
/// </param>
/// <exception cref="Exception">
/// </exception>
private void ExcelOut(string filePath, string fileTemplatePath)
{
try
{
System.IO.File.Copy(fileTemplatePath, filePath);
}
catch (Exception ex)
{
throw new Exception("复制Excel文件出错" + ex.Message);
} using (SpreadsheetDocument document = SpreadsheetDocument.Open(filePath, true))
{
var sheetData = document.GetFirstSheetData();
OpenXmlHelper.CellStyleIndex = 1; ////写标题相关信息
this.UpdateTitleText(sheetData);
//循环rows数据写入excl
IEnumerable<string> rowskey =
new string[] { "OUGUID","AccessoriesCategories" ,"AccessoriesSubclass" ,"MaintenanceMethod",
            "Cycle" ,"CycleUnit","EffectiveDate" ,"ClosingDate","EarlyDays","WorkPermit","RepairBusiness"}; ExcelOpenXMLHelper.SetRows = rowskey;//这部分是需要读取那些字段
DataTable dt=BLL.BudgetBO();
foreach (DataRow dr in dt.Rows)
{
foreach (string item in rowskey)
{
sheetData.SetCellValue(item, dr[item]);
}
}
// var str = OpenXmlHelper.ValidateDocument(document);验证生成的Excel
}
}
/// <summary>
/// 修改标头
/// </summary>
/// <param name="sheetData">
/// The sheet data.
/// </param>
private void UpdateTitleText(SheetData sheetData)
{
sheetData.UpdateCellText("A1", "xx工信息");
sheetData.UpdateCellText("A2", "制表时间:" + DateTime.Now.ToString("yyyy年MM月dd日HH时"));
sheetData.UpdateCellText("G2", "制表人:admin");
}

  以上就是利用OpenXml实现导出导入功能全部代码,Helper类需要的可以留下邮箱。

  

利用OpenXml读取、导出Excel的更多相关文章

  1. Java利用POI导入导出Excel中的数据

         首先谈一下今天发生的一件开心的事,本着一颗android的心我被分配到了PB组,身在曹营心在汉啊!好吧,今天要记录和分享的是Java利用POI导入导出Excel中的数据.下面POI包的下载地 ...

  2. 利用POi3.8导出excel产生大量xml临时文件怎么办?

    在实际项目中,经常会用到POI3.8来导出excel.而导出excel的时候,会因为残留大量以.xml结尾的文件而导致服务器存储空间急剧增长,最后导致系统挂了.为此,该怎么办呢? .xml后缀残留文件 ...

  3. .net mvc利用NPOI导入导出excel

    1.导出Excel :首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  4. ASP.Net MVC利用NPOI导入导出Excel

    因近期项目遇到所以记录一下: 首先导出Excel: 首先引用NPOI包 http://pan.baidu.com/s/1i3Fosux (Action一定要用FileResult) /// <s ...

  5. net mvc 利用NPOI导入导出excel

    1.导出Excel : 首先引用NPOI包(Action一定要用FileResult) /// <summary> /// 批量导出需要导出的列表 /// </summary> ...

  6. 海量数据Excel报表利器——EasyExcel(一 利用反射机制导出Excel)

    EasyExcel 写入(导出) 互联网的精髓就是共享,可以共享技术.共享经验.共享情感.共享快乐~ 很多年前就有这个想法了,从事IT行业时间也不短了,应该把自己工作和业余所学习的东西记录并分享出来, ...

  7. .net利用NPOI导入导出Excel

    NPOI在.net中的操作Excel 1.读取 using (FileStream stream = new FileStream(@"c:\客户资料.xls", FileMode ...

  8. asp.net利用剪切板导出excel

    public enum ClipboardFormats : uint { CF_TEXT = 1, CF_BITMAP = 2, CF_METAFILEPICT = 3, CF_SYLK = 4, ...

  9. java - 读取,导出 excel文件数据

    首先需下载poi java包,添加至构建路径, 写处理方法: import java.io.FileInputStream;import java.io.FileOutputStream;import ...

随机推荐

  1. Lightoj 1231 - Coin Change (I) (裸裸的多重背包)

    题目链接: Lightoj  1231 - Coin Change (I) 题目描述: 就是有n种硬币,每种硬币有两个属性(价值,数目).问用给定的硬币组成K面值,有多少种方案? 解题思路: 赤果果的 ...

  2. 【loj10061】最短母串

    #10061. 「一本通 2.4 练习 4」最短母串 内存限制:512 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 上传者: 1bentong 提交    提交 ...

  3. 喵哈哈村的魔法考试 Round #1 (Div.2) ABCD

    官方题解: http://www.cnblogs.com/qscqesze/p/6418555.html#3623453 喵哈哈村的魔法石 描述 传说喵哈哈村有三种神奇的魔法石:第一种魔法石叫做人铁石 ...

  4. B. Code For 1 一个类似于线段树的东西

    http://codeforces.com/contest/768/problem/B 我的做法是,观察到,只有是x % 2的情况下,才有可能出现0 其他的,都是1来的,所以开始的ans应该是R - ...

  5. python_10(模块与包)

    第1章 模块 1.1 模块的种类 1.2 定义 1.3 作用 1.4 导入及使用 1.4.1 import 1.4.2 测试一: 1.4.3 测试二: 1.4.4 测试三: 1.4.5 小结 1.4. ...

  6. ISCSI存储

    slave-147作为服务端 需要安装的软件 [root@slave-147 ~]# yum install -y scsi-target-utils slave-148和slave-149作为客户端 ...

  7. 迭代器———更锋利的C#代码小记(3)

    直接使用yield return关键字通过类似返回值的方式灵活地构造迭代器 public class EmployeeCollection :IEnumerable<Employee> { ...

  8. 使用JS移除select的某些选项

    var arrvalue = new Array("1", "3", "4", "5", "6", ...

  9. iphone x 高度:100%; 兼容设置

    问题: iphone x 会遇到页面设置 height:100%;之后但是底部还有一定的高度没有覆盖 解决方法: 1.让客户端设置webview的高度为100%; 2.html代码里面添加 viewp ...

  10. Java格式规范及注释的用法

    /* 需求:演示一个Hello World的Java小程序 思路: 1.定义一个类.因为Java程序都是定义在类中,Java程序都是以类的形式存在的,类的形式其实就是字节码的最终体现 2.定义一个主函 ...