Trying to create a new .xlsx file using NPOI and write to it

前端 未结 1 703
一生所求
一生所求 2020-12-13 15:28

Edit:

I\'m trying to write a small console application that will read in lines from an excel spreadsheet, parse the lines and write the fielded data to a new excel f

1条回答
  •  借酒劲吻你
    2020-12-13 15:56

    I figured out what was wrong. It was actually a very simple mistake, I was creating a new row in the inner most for loop when I needed to create the row in the outer loop. Hopefully the working code in the answer will be useful for anyone who needs a starting point with NPOI.

    This website is a great resource for anyone starting out with POI or NPOI.

    http://poi.apache.org/spreadsheet/quick-guide.html#NewWorkbook

    Here is working code.

        public static void TransferXLToTable()
        {
            DataTable dt = new DataTable();
            dt.Columns.Add("City", typeof(string));
            dt.Columns.Add("State", typeof(string));
            dt.Columns.Add("Zip", typeof(string));
    
            using (FileStream stream = new FileStream(OpenFile(), FileMode.Open, FileAccess.Read))
            {
                IWorkbook wb = new XSSFWorkbook(stream);
                ISheet sheet = wb.GetSheet("Sheet1");
                string holder;
                int i = 0;
                do
                {
                    DataRow dr = dt.NewRow();
                    IRow row = sheet.GetRow(i);
                    try
                    {
                        holder = row.GetCell(0, MissingCellPolicy.CREATE_NULL_AS_BLANK).ToString();
                    }
                    catch (Exception)
                    {
                        break;
                    }
    
                    string city = holder.Substring(0, holder.IndexOf(','));
                    string state = holder.Substring(holder.IndexOf(',') + 2, 2);
                    string zip = holder.Substring(holder.IndexOf(',') + 5, 5);
                    dr[0] = city;
                    dr[1] = state;
                    dr[2] = zip;
                    dt.Rows.Add(dr);
                    i++;
                } while (!String.IsNullOrEmpty(holder));
            }
    
            using (FileStream stream = new FileStream(@"C:\Working\FieldedAddresses.xlsx", FileMode.Create, FileAccess.Write))
            {
                IWorkbook wb = new XSSFWorkbook();
                ISheet sheet = wb.CreateSheet("Sheet1");
                ICreationHelper cH = wb.GetCreationHelper();
                for (int i = 0; i < dt.Rows.Count; i++)
                {
                    IRow row = sheet.CreateRow(i);
                    for (int j = 0; j < 3; j++)
                    {
                        ICell cell = row.CreateCell(j);
                        cell.SetCellValue(cH.CreateRichTextString(dt.Rows[i].ItemArray[j].ToString()));
                    }
                }
                wb.Write(stream);
            }
        }
    

    0 讨论(0)
提交回复
热议问题