NPOI导出EXCEL样式问题

zyGreen 2016-04-14 10:54:57
public void ExportXls(DataTable dt, DataTable d, string fileName)
{
HSSFWorkbook book = new HSSFWorkbook();
HSSFSheet sheet1 = book.CreateSheet("礼品册信息表");
HSSFRow head1 = sheet1.CreateRow(0);
HSSFCell cell1 = head1.CreateCell(0);
sheet1.AddMergedRegion(new Region(0, 0, 0, 5));
HSSFSheet sheet2 = book.CreateSheet("礼品册密码表");
HSSFRow head2 = sheet2.CreateRow(0);
HSSFCell cell2 = head2.CreateCell(0);
sheet2.AddMergedRegion(new Region(0, 0, 0, 5));
HSSFCellStyle style = book.CreateCellStyle();
cell1.SetCellValue("礼品册信息表");
cell2.SetCellValue("礼品册密码表");
HSSFRow row = sheet1.CreateRow(1);
row.CreateCell(0).SetCellValue("礼品册名称");
row.CreateCell(1).SetCellValue("礼品册编号");
row.CreateCell(2).SetCellValue("价格");
row.CreateCell(3).SetCellValue("有效时间");
row.CreateCell(4).SetCellValue("数量");
row.CreateCell(5).SetCellValue("礼品册介绍");
for (int i = 0; i < dt.Rows.Count; i++)
{
HSSFRow r = sheet1.CreateRow(i + 2);
r.CreateCell(0).SetCellValue(dt.Rows[i]["GiftBookName"].ToString());
r.CreateCell(1).SetCellValue(dt.Rows[i]["GiftBookNo"].ToString());
r.CreateCell(2).SetCellValue(dt.Rows[i]["Price"].ToString());
r.CreateCell(3).SetCellValue(dt.Rows[i]["ExpiredDate"].ToString());
r.CreateCell(4).SetCellValue(dt.Rows[i]["Amount"].ToString());
r.CreateCell(5).SetCellValue(dt.Rows[i]["Remark"].ToString());
}

HSSFRow row2 = sheet2.CreateRow(1);
for (int i = 0; i < dt.Rows.Count; i++)
{
row2.CreateCell(i).SetCellValue("编号:" + dt.Rows[i]["GiftBookNo"].ToString());


for (int j = 0; j < d.Rows.Count; j++)
{
HSSFRow r2 = null;
if (dt.Rows[i]["GiftBookNo"].ToString() == d.Rows[j]["GiftBookNo"].ToString())
{
if (sheet2.GetRow(j + 2) == null)
{
r2 = sheet2.CreateRow(j + 2);
}
else
{
r2 = sheet2.GetRow(j + 2);
}
r2.CreateCell(i).SetCellValue("0000:" + d.Rows[j]["Password"].ToString());

}
}
}

MemoryStream ms = new MemoryStream();
book.Write(ms);
Response.AddHeader("Content-Disposition", fileName);
Response.BinaryWrite(ms.ToArray());
book = null;
ms.Close();
ms.Dispose();

}


问题
for (int j = 0; j < d.Rows.Count; j++)
{
HSSFRow r2 = null;
if (dt.Rows[i]["GiftBookNo"].ToString() == d.Rows[j]["GiftBookNo"].ToString())
{
if (sheet2.GetRow(j + 2) == null)
{
r2 = sheet2.CreateRow(j + 2);
}
else
{
r2 = sheet2.GetRow(j + 2);
}
r2.CreateCell(i).SetCellValue("0000:" + d.Rows[j]["Password"].ToString());

}
怎么去控制sheet2导出来的数据是并列显示呢?因为导出的密码数量不一样,所有数据显示的样式有问题,怎么把这个样式弄成并列的啊?



...全文
248 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyGreen 2016-04-18
  • 打赏
  • 举报
回复
我知道原因了!已经解决了!!谢谢噢!!!
Poopaye 2016-04-15
  • 打赏
  • 举报
回复
因为npoi容易操作行 先写个方法来操作列 我写的比较简单,可能还要加上创建行和创建Cell的部分
void SetCellValue(ISheet sheet, int row, int col, string text)
{
    sheet.GetRow(row).GetCell(col).SetCellValue(text);
}
然后循环写入
for(int dtrow = 0; dtrow <= dt.Rows.Count; ++dtrow)
{
    string giftId; //获取到礼品编号
    int giftCount; //获取到的礼品数量

    SetCellValue(sheet, 1, dtrow, giftId); //写入第一行的“编号:XXXXXXX”
    
    for(int giftPswIndex = 0; giftPswIndex < giftCount; ++giftPswIndex) //按照产品数量循环
    {
        string giftPsw; //生成的密码
        SetCellValue(sheet, 2 + giftPswIndex, dtrow, giftPsw); //写入密码
    }
}
zyGreen 2016-04-15
  • 打赏
  • 举报
回复

这个是dt表导出的数据,密码个数和礼品册数量是一样的

d表只有编号和密码。我想问的,是怎么把这个样式弄成下面这样的,逻辑控制不来。。。
zyGreen 2016-04-15
  • 打赏
  • 举报
回复
for (int i = 0; i < dt.Rows.Count; i++)
{
int giftcount = Convert.ToInt32(dt.Rows[i]["Amount"].ToString());
string giftno = dt.Rows[i]["GiftBookNo"].ToString();
SetCellValue(sheet2, 1, i, giftno); //写入第一行的“编号:XXXXXXX”
for (int j = 0; j <giftcount; j++)
{
string giftPsw = d.Rows[j]["Password"].ToString(); //生成的密码
SetCellValue(sheet2, 2 + j, i, giftPsw); //写入密码
}
}

public void SetCellValue(HSSFSheet sheet, int row, int col, string text)
{
sheet.GetRow(row).GetCell(col).SetCellValue(text);
}
我仿照你的写,然后。。。
这是什么原因啊?
Poopaye 2016-04-14
  • 打赏
  • 举报
回复
不懂你说的并列是啥意思,有图么?
Poopaye 2016-04-14
  • 打赏
  • 举报
回复
for (int i = 0; i < dt.Rows.Count; i++) { row2.CreateCell(i).SetCellValue("编号:" + dt.Rows[i]["GiftBookNo"].ToString()); 太混乱 dt是什么样子的?
zyGreen 2016-04-14
  • 打赏
  • 举报
回复
抱歉抱歉哈,开始没看到,,,第一张是导出来的图,第二张是我想要的效果图,数据是对的。
zyGreen 2016-04-14
  • 打赏
  • 举报
回复
导出来的:
需要的:

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧