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. Python标准库 re

    正则表达式 regular expression 用来匹配一系列符合句法规则的字符串,是一门独立的小型的语言,如果你了解类Unix系统,那么你对正则表达式就一定不陌生.正则表达式的概念最初是由Unix ...

  2. git for mac

    Git 使用 1.下载完成后打开终端,使用git --version或者which git命令查看安装版本,有就是安装成功了. 2.创建一个全球用户名.全球邮箱 git config --global ...

  3. AtCoder Regular Contest 081 F - Flip and Rectangles

    题目传送门:https://arc081.contest.atcoder.jp/tasks/arc081_d 题目大意: 给定一个\(n×m\)的棋盘,棋盘上有一些黑点和白点,每次你可以选择一行或一列 ...

  4. canvas绘图出现模糊,解决方法

    在项目开发中发现,canvas有一个问题,绘制的图会出现模糊现象. 解决方法之一:将canvas元素放大2倍,然后将整个canvas元素或者其父元素缩小两倍. <!DOCTYPE html> ...

  5. 529 Minesweeper 扫雷游戏

    详见:https://leetcode.com/problems/minesweeper/description/ C++: class Solution { public: vector<ve ...

  6. Hadoop调度框架

        大数据协作框架是一个桐城,就是Hadoop2生态系统中几个辅助的Hadoop2.x框架.主要如下: 1,数据转换工具Sqoop 2,文件搜集框架Flume 3,任务调度框架Oozie 4,大数 ...

  7. Spark MLlib编程API入门系列之特征选择之卡方特征选择(ChiSqSelector)

    不多说,直接上干货! 特征选择里,常见的有:VectorSlicer(向量选择) RFormula(R模型公式) ChiSqSelector(卡方特征选择). ChiSqSelector用于使用卡方检 ...

  8. XSS漏洞解析(三)

    系统存在xss漏洞就容易引发CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click attack/session riding,缩写为: ...

  9. mybatis javaConfig实现

    @Bean public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception { SqlSessio ...

  10. 洛谷 P1351 联合权值

    题目描述 无向连通图G 有n 个点,n - 1 条边.点从1 到n 依次编号,编号为 i 的点的权值为W i ,每条边的长度均为1 .图上两点( u , v ) 的距离定义为u 点到v 点的最短距离. ...