尝试使用NPOI创build一个新的.xlsx文件并写入

编辑:

我正在尝试编写一个小型控制台应用程序,该应用程序将从Excel电子表格中读取行,parsing这些行并将派生数据写入新的Excel文件。 我正在使用.NET和NPOI库。 我终于在挖掘后发现了Apache网站上的POI的Java文档。 这是我更新的代码,带有新的错误。

这实际上创build一个可读的文件,除了它只写文本到第三列。

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++) { for (int j = 0; j < 3; j++) { IRow row = sheet.CreateRow(i); ICell cell = row.CreateCell(j); cell.SetCellValue(cH.CreateRichTextString(dt.Rows[i].ItemArray[j].ToString())); } } wb.Write(stream); } } 

我找出了什么错。 这实际上是一个非常简单的错误,当我需要在外部循环中创build行时,我在最内部的for循环中创build了一个新行。 希望答案中的工作代码对任何需要NPOI起点的人都有用。

对于任何从POI或NPOI开始的人来说,这个网站都是一个很好的资源。

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

这是工作代码。

  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); } }