C# 使用NPOI从table中导出数据到Excel,合并同一列中相同的单元格
for(inti=0;i<dt.Rows.Count;i++){IRowrow=Sheet.CreateRow(i+1);for(intj=0;j<dt.Columns....
for (int i = 0; i < dt.Rows.Count; i++){ IRow row = Sheet.CreateRow(i+1); for (int j = 0; j < dt.Columns.Count; j++) { row.CreateCell(j).SetCellValue(dt.Rows[i][j].ToString()); if ((j==1||j==2) && i >0) {if (string.Compare(dt.Rows[i][j].ToString(), dt.Rows[i - 1][j].ToString()) == 0) {CellRangeAddress region = new CellRangeAddress(i,i+1,j,j); Sheet.AddMergedRegion(region);}}}}
现在用的是上面的代码来判断单元格值是否相同,相同则合并(第1列和第2列),超过两个相同的就会有问题,前两个可以正常合并,第3个开始单元格合并了,但内容有问题,如下图
请帮忙看看要怎么改,或者另外有什么方法 展开
现在用的是上面的代码来判断单元格值是否相同,相同则合并(第1列和第2列),超过两个相同的就会有问题,前两个可以正常合并,第3个开始单元格合并了,但内容有问题,如下图
请帮忙看看要怎么改,或者另外有什么方法 展开
展开全部
n行合并,应该是一起合并的,并不是两行两行合并。
要实现,算法上要想一下。
确定每组的开始行号跟结束行号,由这两个值来合并
int start=…;//合并开始行号
int end=…;//合并结束行号
if(start!=end)//该组开始行号跟结束行号相同时候,该组只有一行,不用合并。不等才合并
{
CellRangeAddress region = new CellRangeAddress(start,end,j,j);
Sheet.AddMergedRegion(region);
}
上面开始行号跟结束行号,就需要在循环中判断,并设置。
这只是思路,供参考。
要实现,算法上要想一下。
确定每组的开始行号跟结束行号,由这两个值来合并
int start=…;//合并开始行号
int end=…;//合并结束行号
if(start!=end)//该组开始行号跟结束行号相同时候,该组只有一行,不用合并。不等才合并
{
CellRangeAddress region = new CellRangeAddress(start,end,j,j);
Sheet.AddMergedRegion(region);
}
上面开始行号跟结束行号,就需要在循环中判断,并设置。
这只是思路,供参考。
更多追问追答
追问
但是目前就是没法确定start和end
追答
int start = 0;//记录同组开始行号
int end = 0;//记录同组结束行号
string temp = "";
DataTable dt;
for (int i = 0; i < dt.Rows.Count; i++)
{
IRow row = Sheet.CreateRow(i + 1);
for (int j = 0; j < dt.Columns.Count; j++)
{
string cellText = dt.Rows[i][j].ToString();
row.CreateCell(j).SetCellValue(cellText);
if (j == 2)
{
if (cellText == temp)//上下行相等,记录要合并的最后一行
{
end = i;
}
else//上下行不等,记录
{
if (start != end)
{
CellRangeAddress region = new CellRangeAddress(start, end, 1, 1);
Sheet.AddMergedRegion(region);
CellRangeAddress region2 = new CellRangeAddress(start, end, 2, 2);
Sheet.AddMergedRegion(region2);
}
start = i;
end = i;
temp = cellText;
}
}
}
}
花了点时间帮你写了下代码,看行不行。可以的话要点赞啊~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询