• 利用OpenXml读取、导出Excel


         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; 80px; border:1px solid #09F" >下载模板</a></div>";
        html += "<div style='padding:10px;'><input type="file" name="uploadImg" id="uploadImg"  style="  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类需要的可以留下邮箱。

      

       

  • 相关阅读:
    理解Python中的元类(metaclass)
    The selected directory is not a valid home for Go SDK
    FlinkSQL 之乱序问题
    Prometheus的一些基础知识
    redis+lua实现脚本一键查询
    mysql刷题笔记
    SpringBoot利用AbstractRoutingDataSource 源码分析
    K8S那些事
    框架源码解析系列
    SpringBoot集成RocketMQ
  • 原文地址:https://www.cnblogs.com/jxluowei/p/3899734.html
Copyright © 2020-2023  润新知