如何在生成Excel(xlsx)时在列之前设置一行

我只想为列前的excel文档标题设置一行。 有人能帮我吗?! 按照代码:

在这里我创build我的Excel格式,列

DataTable dt = new DataTable(); dt.Columns.Add("Value 1", typeof(string)); dt.Columns.Add("Value 2", typeof(string)); 

在此之后,已经定义了我的值(var value1 =“exemple”)

 dt.Rows.Add( value1, value2); WriteExcelWithNPOI(dt, "xlsx"); 

我希望这是可以理解的。

如果有必要,也可以按照生成xlsx的代码进行操作:

 public void WriteExcelWithNPOI(DataTable dt, String extension){ IWorkbook workbook; if (extension == "xlsx") { workbook = new XSSFWorkbook(); } else if (extension == "xls") { workbook = new HSSFWorkbook(); } else { throw new Exception("This format is not supported"); } ISheet sheet1 = workbook.CreateSheet("Sheet 1"); //make a header row IRow row1 = sheet1.CreateRow(0); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row1.CreateCell(j); String columnName = dt.Columns[j].ToString(); cell.SetCellValue(columnName); } //loops through data for (int i = 0; i < dt.Rows.Count; i++) { IRow row = sheet1.CreateRow(i + 1); for (int j = 0; j < dt.Columns.Count; j++) { ICell cell = row.CreateCell(j); String columnName = dt.Columns[j].ToString(); cell.SetCellValue(dt.Rows[i][columnName].ToString()); } } using (var exportData = new MemoryStream()) { Response.Clear(); workbook.Write(exportData); if (extension == "xlsx") //xlsx file format { Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "Relatorio-Rotas.xlsx")); Response.BinaryWrite(exportData.ToArray()); } else if (extension == "xls") //xls file format { Response.ContentType = "application/vnd.ms-excel"; Response.AddHeader("Content-Disposition", string.Format("attachment;filename={0}", "Relatorio-Rotas.xls")); Response.BinaryWrite(exportData.GetBuffer()); } Response.End(); }} public void WriteTsv<T>(IEnumerable<T> data, TextWriter output){ PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T)); foreach (PropertyDescriptor prop in props) { output.Write(prop.DisplayName); // header output.Write("\t"); } output.WriteLine(); foreach (T item in data) { foreach (PropertyDescriptor prop in props) { output.Write(prop.Converter.ConvertToString( prop.GetValue(item))); output.Write("\t"); } output.WriteLine(); }} 

你可以添加前两列:第一个是标题,第二个是空格字符(因为如果设置为空,列名将是Column1 ):

 DataTable dt = new DataTable(); dt.Columns.Add("Title", typeof(string)); dt.Columns.Add(" ", typeof(string)); dt.Rows.Add("Value 1", "Value 2"); dt.Rows.Add("Example 1", "Example 2"); WriteExcelWithNPOI(dt, "xlsx"); 

请注意, DataTable不具有colspan属性,因此如果要合并列,则必须在WriteExcelWithNPOI方法中执行此操作。

我认为最简单的做法是将标题信息写入Excel文件,closures它,然后再次打开,将实际的数据表添加到Excel文件中。 在这个答案中可以find一个示例实现。

请注意,请确保您使用FileStream而不是MemoryStream以便您的更改将被保存。