在ASP.NET上将Excel导入Json格式

时间:2016-05-15 12:28:17

标签: c# asp.net json excel

我需要询问有关子女父母关系的导入excel表格问题。

下面我有一个样本表

enter image description here

输出我想要那样

[{"Code":"888800","Title":"Category","Value":"123","Children":[]},
 {"Code":"100000","Title":"Category1","Value":"123","Children":
 [
    {"Code":"120000","Title":"SubCategory","Value":"123","Children":[]}, 
    {"Code":"352000","Title":"SubCategory2","Value":"123","Children":[]},
    {"Code":"200000","Title":"SubCategory3","Value":"123","Children":[]},
  ]},
  {"Code":"212101","Title":"Category3","Value":"123","Children":
  [
    {"Code":"213100","Title":"SubCategory4","Value":"123","Children":[]},
    {"Code":"213200","Title":"SubCategory4","Value":"123","Children":[]}
  ]}
]

下面我有我的代码,但我不知道我的错误点在哪里。 当我创建Json序列化值并且子元素部分不正确时

    int sheetname = 0;
    class Position
    {
        public Position()
        {
            this.Children = new List<Position>();
        }

        public string Code { get; set; }
        public string Title { get; set; }
        public string Value { get; set; }

        public List<Position> Children { get; set; }
    }

    Position Parsing(string value)
    {
        string pattern = "\\((?<Code>[\\w]+)\\)(?<Title>.+)";
        var regex = new Regex(pattern);
        var match = regex.Match(value);

        if (match.Success)
        {
            return new Position()
            {
                Code = match.Groups["Code"].Value,
                Title = match.Groups["Title"].Value,
                Value = match.Groups["Value"].Value
            };
        }
        else
        {
            return null;
        }
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        string sSourceConstr = "";
        string fileName = Path.GetFileName(fuExcel.PostedFile.FileName);

        if (fuExcel.FileName == string.Empty)
        {
            JSBuilder.AlertMessage(this, "ERROR");
        }

        string fileExtension = Path.GetExtension(fuExcel.PostedFile.FileName);
        string fileLocation = Server.MapPath("~/" + fileName);
        fuExcel.SaveAs(fileLocation);


        if (fuExcel.HasFile)
        {
            if (fileExtension == ".xls")
            {
                sSourceConstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            }
            else if (fileExtension == ".xlsx")
            {
                sSourceConstr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            }
            try
            {
                IWorkbook workbook = default(IWorkbook);
                using (FileStream file = new FileStream(fileLocation, FileMode.Open))
                {

                    workbook = WorkbookFactory.Create(file);

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

                    Position posnTop = null;
                    List<Position> posnList = new List<Position>();
                    ISheet sheet = workbook.GetSheetAt(0);
                    for (int row = 1; row <= sheet.LastRowNum; row++)
                    {
                        if (sheet.GetRow(row) != null)
                        {
                            DataTable dt = new DataTable();

                            IRow excelRow = default(IRow);
                            excelRow = sheet.GetRow(1);
                            for (int Cel = 1; Cel <= excelRow.LastCellNum - 1; Cel++)
                            {

                                string industry = sheet.GetRow(1).GetCell(Cel).ToString();
                                string IndustryCode = sheet.GetRow(2).GetCell(Cel).ToString();

                                for (int k = 4; k <= sheet.LastRowNum; k++)
                                {
                                    items.AddRange(sheet.GetRow(k).GetCell(Cel - 1).ToString().Split(new string[] { Environment.NewLine }, StringSplitOptions.RemoveEmptyEntries));

                                    foreach (var item in items)
                                    {
                                        if (!string.IsNullOrEmpty(item) && item.Length > 1)
                                        {
                                            if ("\t".Equals(item.Substring(0, 1)))
                                            {
                                                //child
                                                var posn = this.Parsing(item.Trim());
                                                if (posn != null)
                                                {
                                                    posnTop.Children.Add(posn);
                                                }
                                            }
                                            else
                                            {
                                                var posn = this.Parsing(item);
                                                if (posn != null)
                                                {
                                                    posnTop = posn;
                                                    posnList.Add(posn);
                                                }
                                            }


                                              if (sheet.GetRow(k).GetCell(Cel) != null)
                                            {
                                                string value = sheet.GetRow(k).GetCell(Cel).ToString();
                                            }
                                        }
                                    }


                                }
                            }
                            TextBox txtMsg = new TextBox();
                            this.txtMsg.Text = Newtonsoft.Json.JsonConvert.SerializeObject(posnList);
                            #region information Import to SQLSERVER
                            ////////////////////
                            //import sql part// 
                            ////////////////////
                            #endregion
                        }
                        else
                        {
                            JSBuilder.AlertMessage(this, true, "import succesfull");
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Response.Write(ex);
            }
        }
    }

0 个答案:

没有答案