系统:win10
开发平台:vs2022
问题描述:
Excel表格,有合并单元格,需要做逐行数据导入,那么要做的事情就是,找到合并的单元格清单,取消合并,然后把第一个单元格的内容,复制到合并趋于的每一个单元格。然后再做导入。
现在发现,用sheet.Copy方法,会失败,只有单元格是常规的,且内容是文本的,才能正常复制,其他日期,数字等,都无法正确复制填充到取消合并的单元格。
附件中有 Excel样表,有运行代码后的截图效果,不知道怎么加载图片到帖子中,请帮忙找解决方案吧,谢谢!
- Code: Select all
private void unMergeAndCopy()
{
string file = @"D:\Excel\test.xlsx";
Workbook workbook = new Workbook();
workbook.LoadFromFile(file);
Worksheet sheet = workbook.Worksheets[0];
CellRange[] rangeList = sheet.MergedCells;
foreach (CellRange srcRange in rangeList)
{
string fromLocal = srcRange.Cells.First().RangeAddressLocal;
//string toLocal = srcRange.Cells.Last().RangeAddressLocal;
srcRange.UnMerge();
CellRange rangeFirst = srcRange.Cells.First();
foreach (CellRange rangeItem in srcRange)
{
string itemAddress = rangeItem.RangeAddressLocal;
//无论是用地址变量,还是直接单元格复制,都有问题,保存后的单元格没有值,或者没有显示内容
//if (fromLocal != itemAddress)
// sheet.Copy(sheet.Range[fromLocal], sheet.Range[itemAddress], true);
if (rangeItem != rangeFirst)
sheet.Copy(rangeFirst, rangeItem, true);
}
}
//以写死的位置复制到写死的位置,复制就能带过去值和格式,显示也正常
//sheet.Copy(sheet.Range["A3"], sheet.Range["A4"], true);
//sheet.Copy(sheet.Range["A3"], sheet.Range["A5"], true);
//sheet.Copy(sheet.Range["A6"], sheet.Range["A7"], true);
//sheet.Copy(sheet.Range["A6"], sheet.Range["A8"], true);
//sheet.Copy(sheet.Range["A6"], sheet.Range["A9"], true);
//sheet.Copy(sheet.Range["B2"], sheet.Range["B3"], true);
//sheet.Copy(sheet.Range["B2"], sheet.Range["B4"], true);
//sheet.Copy(sheet.Range["C5"], sheet.Range["C6"], true);
//sheet.Copy(sheet.Range["C5"], sheet.Range["C7"], true);
//sheet.Copy(sheet.Range["C8"], sheet.Range["C9"], true);
//sheet.Copy(sheet.Range["C8"], sheet.Range["C10"], true);
//sheet.Copy(sheet.Range["E2"], sheet.Range["E3"], true);
//sheet.Copy(sheet.Range["E2"], sheet.Range["E4"], true);
//sheet.Copy(sheet.Range["E5"], sheet.Range["E6"], true);
//sheet.Copy(sheet.Range["E5"], sheet.Range["E7"], true);
//sheet.Copy(sheet.Range["E8"], sheet.Range["E9"], true);
//sheet.Copy(sheet.Range["E8"], sheet.Range["E10"], true);
workbook.SaveToFile(file, ExcelVersion.Version2010);
MessageBox.Show("执行完成!");
}