C#,实习生
在把excel转xml时,我遇到了合并单元格的情况,一个合并单元格占用多个位置但格内的值却存储在第一的空格内,
通过用字典记录每一列的具体位置,而对于合并的单元格则需要记录起始位置和结束位置。
本算法的巧妙之处在于面对dictionary的key会重复的问题,我们一开始就固定好起始位置,一旦遇到合并单元格只需要累加后续的结束位置即可。
#region 表头字典
Dictionary<string, int[]> dic = new Dictionary<string, int[]>();
// string s = row.GetCell(47).ToString();
if (cell != null)//判断单元格是否存在
{
//从第一行的第一个位置开始,到最后一个位置结束(下标为0)
for (int i = header.FirstCellNum; i < header.LastCellNum;)
{
string currentkey = string.Empty;//每次把key清空
int startpos = 0;//规定好起始位置
//一个单元格,如果单元格的值不为空,开始记录并传递值;
if (!string.IsNullOrEmpty(header.GetCell(i).ToString()))
{
startpos = i;
currentkey = header.GetCell(startpos).ToString();
dic.Add(currentkey, new int[] { startpos });
i++;
}
//合并单元格,如果单元格的值为空,从起始位置累加,直到获取下一个不为空的单元格;
else
{
while (string.IsNullOrEmpty(header.GetCell(i).ToString()))
{
dic[currentkey] = new int[] { startpos, i - 1 };
i++;
}
}
}
}
#endregion
由于最近遇到了IO方面的问题,后续将做出系列文章