【问题标题】:Copy format from one row to another using c#使用c#将格式从一行复制到另一行
【发布时间】:2013-08-30 23:28:04
【问题描述】:

这个问题与here 提出的问题非常相似。但是给出的答案建议将格式与数据一起复制。我有一个使用 SSIS 生成的 excel 表 (.xlsx)。现在我已经在第一行设置了格式,我想将其复制到工作表中已经填写的所有行。我怎样才能使用 C# 做到这一点?我正在使用 Excel 互操作。

【问题讨论】:

  • 显示用于格式化第一行的代码,也许它可以应用于其他行。
  • 我正在手动设置模板文件第一行的格式。新行将添加到此模板文件中,并且需要将格式应用于这些行。

标签: c# excel ssis formatting excel-interop


【解决方案1】:

您可以将PasteSpecialxlPasteFormats 一起使用。

Excel.Range R1 = (Excel.Range)oSheet.Cells[11, 11];
R1.Copy(Type.Missing);

Excel.Range R2 = (Excel.Range)oSheet.Cells[15, 15];
R2.PasteSpecial(Excel.XlPasteType.xlPasteFormats,
    Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, false, false);

【讨论】:

  • 太糟糕了,它劫持了剪贴板。不是一个可行的解决方案。
【解决方案2】:

所以你想从第一个单元格中复制 format 并将其应用到你所有的 sheet

有办法处理:

 Range sourceRange = sheet.get_Range("A1:A1");
 sourceRange.Copy();

 Range last = sheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
 Range destinationRange = sheet.get_Range("A1", last);

 destinationRange.PasteSpecial(XlPasteType.xlPasteFormats);

【讨论】:

  • System.Type.Missing 需要为PasteSpecial 的缺失参数提供。
  • run PasteSpecial() 不带任何参数效果很好。那你什么意思?
  • 我的错误,对不起!我错误地记得 C# 要求在使用 Interop 时提供所有参数。从 C# 2010(引入了可选参数)开始不再需要此要求。
  • 如果我想复制该行中单元格的值怎么办?
【解决方案3】:

我按照 mickro 的解释使用它,效果很好!!!!!!

                Range contentAlarms =exlWsheetAlarms.get_Range("A1:G"+countList);
                contentAlarms.Copy(Type.Missing);

                Range last = exlWsheetUlt.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing);
                Range destinationRange = exlWsheetUlt.get_Range("B90", last);

                destinationRange.PasteSpecial(XlPasteType.xlPasteFormats);

谢谢!

【讨论】:

  • 所以你是从 contentAlarms 复制到最后一个?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 2021-12-28
  • 2019-02-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多