解析excel+结合表单上的数据生成csv文件

来源:互联网 发布:淘宝店铺封店重开技巧 编辑:程序博客网 时间:2024/05/29 15:38


个人网站:友书小说网(http://laiyoushu.com)绿色纯净无广告,欢迎大家前来看小说

using System;

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.SessionState;
using Sjune.Common;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;
using System.IO;
using System.Data.SqlClient;
using NPOI.HSSF.Util;
using NPOI.HPSF;
using System.Text;
using Sjune.Model;
using System.Reflection;


namespace Sjune.Web.program.ashx
{
    /// <summary>
    /// Upload_order 的摘要说明
    /// </summary>
    public class Upload_order : Web.UI.UserPage, IHttpHandler, IRequiresSessionState
    {
        protected HSSFWorkbook hssfworkbook;
        public static string path = HttpContext.Current.Request.PhysicalApplicationPath;
        public void ProcessRequest(HttpContext context)
        {
            try
            {
                context.Response.ContentType = "text/json";
                context.Response.Buffer = true;
                context.Response.ExpiresAbsolute = DateTime.Now.AddDays(-1);
                context.Response.AddHeader("pragma", "no-cache");
                context.Response.AddHeader("cache-control", "");
                context.Response.CacheControl = "no-cache";
                var logName = Session["loginName"];
                string action = context.Request["action"] + "";
                Model.MV_Upload_order db_model = new Model.MV_Upload_order();

                List<ModelExcel> list = new List<ModelExcel>();

                //开始解析之前上传excel中的数据
                try
                {
                    StringBuilder sbr = new StringBuilder();
                    var PreviousUrl = context.Request["url"].ToString();
                    PreviousUrl = path + PreviousUrl;
                    using (FileStream fs = File.OpenRead(PreviousUrl.ToString()))   //打开myxls.xls文件
                    {
                        HSSFWorkbook wk = new HSSFWorkbook(fs);   //把xls文件中的数据写入wk中
                        for (int i = 0; i < wk.NumberOfSheets; i++)  //NumberOfSheets是myxls.xls中总共的表数
                        {
                            ISheet sheet = wk.GetSheetAt(i);   //读取当前表数据
                            for (int j = 0; j <= sheet.LastRowNum; j++)  //LastRowNum 是当前表的总行数
                            {
                                IRow row = sheet.GetRow(j);  //读取当前行数据
                                if (j > 0)
                                {
                                    if (row != null)
                                    {
                                        ModelExcel lu = new ModelExcel();
                                        lu.Sign_Code = row.GetCell(0).ToString();
                                        //lu.Special_Code = row.GetCell(1).ToString();
                                        lu.Counts = (row.GetCell(1).ToString()).ToInt();
                                        lu.Unit = row.GetCell(2).ToString() == "个" ? "E" : "C";
                                        list.Add(lu);
                                    }
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    context.Response.Write(ex.ToString());
                }
                string timeDay = DateTime.Now.ToString("yyyyMMdd");
                db_model.User_Account = context.Request["User_Account"].ToString();
                db_model.Pro_Name = context.Request["Pro_Name"].ToString();
                db_model.Buyer_Name = context.Request["Buyer_Name"].ToString();
                db_model.Company = context.Request["Company"].ToString();
                db_model.Buyer_Tel = context.Request["Buyer_Tel"].ToString();
                db_model.Buyer_Email = context.Request["Buyer_Email"].ToString();
                db_model.Upload_Cause = context.Request["Upload_Cause"].ToString();
                db_model.PO = context.Request["PO"].ToString();
                db_model.Start_Date = context.Request["Start_Date"].ToDate().ToString("yyyy-MM-dd");
                db_model.Order_Status = "1";
                db_model.Order_Date = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
                db_model.U_Other_Account = context.Request["U_Other_Account"].ToString();
                db_model.is_del = 0;
                //这里生成6位数的流水号
                db_model.SerialNumber = OrderNoHelper.OrderID;
                //生成流水号
                db_model.Web_Ord_Number = timeDay + db_model.Upload_Cause + db_model.SerialNumber.ToString();
                string[] TBBody = { db_model.Web_Ord_Number, db_model.User_Account, db_model.U_Other_Account, db_model.Order_Date.Substring(0, 10), db_model.PO.ToString(), db_model.Upload_Cause, db_model.Start_Date };
                string sNewFileName = Utils.GetRamCode();
                System.Text.StringBuilder sb = new System.Text.StringBuilder();
                sb.Append("{\"Status\":\"");
                sb.Append("/UploadSys/" + db_model.Web_Ord_Number + ".xls");
                sb.Append("\"}");
                var url = sb.ToString();
                url = url.Substring(11);
                url = path + url.Substring(0, url.LastIndexOf("xls")) + "csv"; ;


                List<ModelCSV> csvList = new List<ModelCSV>();
                for (int j = 0; j < list.Count; j++)
                {
                    ModelCSV mcs = new ModelCSV();
                    mcs.Sign_Code = "#" + list[j].Sign_Code;
                    mcs.Counts = "#" + list[j].Counts.ToString();
                    mcs.Unit = list[j].Unit;
                    mcs.Web_Ord_Number = "#" + TBBody[0];
                    mcs.User_Account = "#" + TBBody[1];
                    mcs.U_Other_Account = "#" + TBBody[2];
                    mcs.Order_Date = TBBody[3];
                    mcs.PO = "#" + TBBody[4];
                    mcs.Upload_Cause = "#" + TBBody[5];
                    mcs.SSD = TBBody[6];
                    csvList.Add(mcs);
                }
                SaveAsCSV(url, csvList);

                var UserUrl = context.Request["url"].ToString();
                db_model.File_User_Number = UserUrl.Substring(UserUrl.LastIndexOf("/") + 1);
                db_model.File_Sys_Number = url.Substring(url.LastIndexOf("/") + 1); ;
                if (new BLL.Upload_Order().Add(db_model) > 0)
                {
                    context.Response.Write(JsonHelper.ObjectToJSON(new { Status = 0, Message = "数据添加成功", Data = "" }));
                }
                else
                {
                    context.Response.Write(JsonHelper.ObjectToJSON(new { Status = 1, Message = "数据添加失败,请刷新页面重试", Data = "" }));
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
        protected void InitializeWorkbook()
        {
            hssfworkbook = new HSSFWorkbook();
            DocumentSummaryInformation dsi = PropertySetFactory.CreateDocumentSummaryInformation();
            dsi.Company = "NPOI Team";
            hssfworkbook.DocumentSummaryInformation = dsi;
            SummaryInformation si = PropertySetFactory.CreateSummaryInformation();
            si.Subject = "NPOI SDK Example";
            hssfworkbook.SummaryInformation = si;
        }

        public bool IsReusable
        {
            get
            {
                return false;
            }
        }

        //生成csv文件
        public static bool SaveAsCSV<T>(string fileName, IList<T> listModel) where T : class, new()
        {
            bool flag = false;
            try
            {
                StringBuilder sb = new StringBuilder();
                //通过反射 显示要显示的列
                BindingFlags bf = BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Static;//反射标识
                Type objType = typeof(T);
                PropertyInfo[] propInfoArr = objType.GetProperties(bf);
                string header = string.Empty;

                List<string> listPropertys = new List<string>();

                foreach (PropertyInfo info in propInfoArr)
                {
                    if (string.Compare(info.Name.ToUpper(), "ID") != 0) //不考虑自增长的id或者自动生成的guid等
                    {
                        if (!listPropertys.Contains(info.Name))
                        {
                            listPropertys.Add(info.Name);
                        }
                        header += info.Name + ",";
                    }
                }

                header = "Web Order Number" + "," + "Customer Account Number" + "," + "Customer Branch Account" + "," + "Order date" + "," + "PO Number" + "," + "Order Type" + "," + "SS Date" + "," + "Product ID(Product Identification Code)" + "," + "QTY(Quantity)" + "," + "Unit";

                sb.AppendLine(header.Trim(',')); //csv头


                foreach (T model in listModel)
                {
                    string strModel = string.Empty;
                    foreach (string strProp in listPropertys)
                    {
                        foreach (PropertyInfo propInfo in propInfoArr)
                        {
                            if (string.Compare(propInfo.Name.ToUpper(), strProp.ToUpper()) == 0)
                            {
                                PropertyInfo modelProperty = model.GetType().GetProperty(propInfo.Name);
                                if (modelProperty != null)
                                {
                                    object objResult = modelProperty.GetValue(model, null);
                                    string result = ((objResult == null) ? string.Empty : objResult).ToString().Trim();
                                    if (result.IndexOf(',') != -1)
                                    {
                                        result = "\"" + result.Replace("\"", "\"\"") + "\""; //特殊字符处理 
                                        //result = result.Replace("\"", "“").Replace(',', ',') + "\"";
                                    }
                                    if (!string.IsNullOrEmpty(result))
                                    {
                                        Type valueType = modelProperty.PropertyType;
                                        if (valueType.Equals(typeof(Nullable<decimal>)))
                                        {
                                            result = decimal.Parse(result).ToString("#.#");
                                        }
                                        else if (valueType.Equals(typeof(decimal)))
                                        {
                                            result = decimal.Parse(result).ToString("#.#");
                                        }
                                        else if (valueType.Equals(typeof(Nullable<double>)))
                                        {
                                            result = double.Parse(result).ToString("#.#");
                                        }
                                        else if (valueType.Equals(typeof(double)))
                                        {
                                            result = double.Parse(result).ToString("#.#");
                                        }
                                        else if (valueType.Equals(typeof(Nullable<float>)))
                                        {
                                            result = float.Parse(result).ToString("#.#");
                                        }
                                        else if (valueType.Equals(typeof(float)))
                                        {
                                            result = float.Parse(result).ToString("#.#");
                                        }
                                    }
                                    strModel += result + ",";
                                }
                                else
                                {
                                    strModel += ",";
                                }
                                break;
                            }
                        }
                    }
                    strModel = strModel.Substring(0, strModel.Length - 1);
                    sb.AppendLine(strModel);
                }
                string content = sb.ToString();
                string dir = Directory.GetCurrentDirectory();
                string fullName = Path.Combine(dir, fileName);
                if (File.Exists(fullName)) File.Delete(fullName);
                using (FileStream fs = new FileStream(fullName, FileMode.CreateNew, FileAccess.Write))
                {
                    StreamWriter sw = new StreamWriter(fs, Encoding.Default);
                    sw.Flush();
                    sw.Write(content);
                    sw.Flush();
                    sw.Close();
                }
                flag = true;
            }
            catch
            {
                flag = false;
            }
            return flag;

        }

        //csvmodel
        public class ModelCSV
        {
            public string Web_Ord_Number { get; set; }
            public string User_Account { get; set; }
            public string U_Other_Account { get; set; }
            public string Order_Date { get; set; }
            public string PO { get; set; }
            public string Upload_Cause { get; set; }
            public string SSD { get; set; }
            public string Sign_Code { get; set; }
            public string Counts { get; set; }
            public string Unit { get; set; }
        
        }
    }
}
1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 护士学分不达标怎么办 高中学籍错了怎么办 定时器时间太短不够用怎么办? 考试时间不够用怎么办 感觉时间不够用怎么办 学习时间不够用怎么办 天天时间不够用怎么办 网贷骚扰通讯录怎么办 老被电话骚扰怎么办 对付广场舞噪音怎么办 普法平台考试不及格怎么办 假疫苗事件孩子怎么办 网上办生育证怎么办? 新生儿足跟血筛查没通过怎么办 新生儿听力筛查未通过怎么办 医药代表业绩差怎么办 网站诈骗被骗了怎么办 网贷利息过高怎么办 麦粒肿脓包不破怎么办 处方单丢了怎么办 深圳社保转外省怎么办 单位退休后医保怎么办 鼓楼医院就诊卡怎么办 2017个体户怎么办环评 查环保停工工人怎么办 林地己建房了怎么办 交不起环保罚款怎么办 单位没钱交社保怎么办 单位不缴医保怎么办 公司拖欠工资后注销怎么办 吸入纳米光触媒怎么办 溶解氧过低该怎么办 停水后来水浑浊怎么办 拉菜绿色通行证怎么办 烤箱下火太大怎么办 烤箱没有下火怎么办 烤箱的火不均匀怎么办 烤箱没上下火怎么办 烤箱两头火小怎么办? 手机上网夜视怎么办 环保标志到期了怎么办