C#操作Excel复制多个单元格问题

人生海海 2010-11-21 12:04:54
RT,现在我有一个EXCEL文件,然后引用其中的A1到F7单元。
Excel.Range rang = Worksheet1.get_Range("A1", "F7");

现在,我想把这个rang范围对象的内容,复制2份到当前工作薄中。我使用的方法是这样的:
Excel.Range rang1 = Worksheet1.get_Range("A8", "F14");
rang1.Copy(rang)

Excel.Range rang2 = Worksheet1.get_Range("A15", "F21");
rang2.Copy(rang)

然后保存。结果打开保存后的.xls文件,里面连原来A1:F7的内容都没有了。为什么呢?要达到以上功能,必须怎么做?谢谢大家!

...全文
875 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
在路上20130607 2010-12-28
  • 打赏
  • 举报
回复
在路上20130607 2010-12-28
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 colorall 的回复:]

其实你弄反了,rang(源)拷贝到rang1,rang2(目标),应该是下面这样的

Excel.Range rang1 = Worksheet1.get_Range("A8", "F14");
rang.Copy(rang1)

Excel.Range rang2 = Worksheet1.get_Range("A15", "F21");
rang.Copy(rang2)
[/Quote]
呵呵 不错 学习了
不知道 npoi对这个支持的怎么样
qianshukongcheng 2010-12-28
  • 打赏
  • 举报
回复
6楼正解
龍月 2010-11-21
  • 打赏
  • 举报
回复
试试:

xlSheet = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(1);

Excel.Range range = xlSheet.get_Range("A1", Type.Missing);

range.Value = "123";

System.Windows.Forms.Clipboard.SetDataObject(range.Value.ToString());

Excel.Worksheet sheet1 = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(2);

Excel.Range range1 = sheet1.get_Range("B1", Type.Missing);

sheet1.Paste(range1, false);


colorall 2010-11-21
  • 打赏
  • 举报
回复
其实你弄反了,rang(源)拷贝到rang1,rang2(目标),应该是下面这样的

Excel.Range rang1 = Worksheet1.get_Range("A8", "F14");
rang.Copy(rang1)

Excel.Range rang2 = Worksheet1.get_Range("A15", "F21");
rang.Copy(rang2)
Teng_s2000 2010-11-21
  • 打赏
  • 举报
回复
网上贴的啊哈哈


在用Excel作报表的时候,可能会碰到分页的情况,这样就要分成多个Sheet显示,如果要在每页都保留表头,就需要将第一页作为模板设计的表头部分拷贝到其他的Sheet上,这时就要用用到Excel中的单元格拷贝。
下面的代码说明如何一个Sheet上的选定内容拷贝到另一个Sheet上:

ThisApplication = new Excel.Application();
ThisWorkbook = ThisApplication.Workbooks.Open("z:\\Book1.xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
ThisApplication.DisplayAlerts = false;
xlSheet = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(1);

Excel.Range range = xlSheet.get_Range("A1", Type.Missing);
range.Value = "123";
Excel.Worksheet sheet1 = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(2);
Excel.Range range1 = sheet1.get_Range("B1", Type.Missing);
range.Copy(range1);

ThisWorkbook.SaveAs("z:\\Book2.xls", Type.Missing, Type.Missing,
Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);

可以看到,核心的代码是很简单的,就是选定一个源区域,然后指定另一个目标区域,调用源区域的Copy方法将内容整个复制到目标区域,但是你会发现是连单元格的格式等属性一并拷贝过去的,如果要只拷贝单元格中的文本呢?那就要用到windows剪贴板了:
xlSheet = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(1);
Excel.Range range = xlSheet.get_Range("A1", Type.Missing);
range.Value = "123";
System.Windows.Forms.Clipboard.SetDataObject(range.Value.ToString());
Excel.Worksheet sheet1 = (Excel.Worksheet)ThisWorkbook.Worksheets.get_Item(2);
Excel.Range range1 = sheet1.get_Range("B1", Type.Missing);
sheet1.Paste(range1, false);
要注意的是,这种方式只能选一个单元格,复制一个,不能选定一批单元格进行复制。

上面的例子只给出了主要部分的代码,其他的像销毁Excel进程等操作请参考前面的几篇Excel作报表的随笔
人生海海 2010-11-21
  • 打赏
  • 举报
回复
楼上的,我使用工作薄的Paste方法,只能复制一个单元格,多个单元格,无法用你提供的方法实现.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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