博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
object does not contain a definition for get_range
阅读量:6508 次
发布时间:2019-06-24

本文共 4650 字,大约阅读时间需要 15 分钟。

原因[1]

在VS2012中调用COM Interop DLL操作Excel通过get_Range去获取Range时,会发生Object does not contain a definition for get_Range的错误。其原因和解决方案:

Misha's explanation is correct - when using No PIA, methods returning object are treated as if they return dynamic in order to simulate the VBA semantics of COM Variants. Because the return value of sh.Cells is Object, sh.get_Range is dispatched dynamically, and the dynamic COM binder does not support the get_Range syntax exposed in C# before indexed properties were supported. We've tried to maintain backwards compatibility wherever possible when you turn on Embed Interop Types for a COM reference, but this is one place where some further tweaking is required.

The workaround you proposed will work - a cleaner workaround is the one Mike Rosenblum pointed out to use C# 4.0's new indexed properties syntax, which the dynamic COM binder does understand. You can then represent the operation with the following code:
Excel.Range r = sh.Range[sh.Cells[1, 1], sh.Cells[2, 2]];
See Also

 

具体来讲[2]

由于Framework版本不同,因此支持的也不一样

例如:

在 .NET Framework 3.5 語法

Excel.Range r = sh.Range(sh.Cells[1, 1], sh.Cells[2, 2]);

在 .NET Framework 4.0-4.5 改用
Excel.Range r = sh.Range[sh.Cells[1, 1], sh.Cells[2, 2]];

 

winform导出Excel代码:

使用方法:    ExportExcel("条形码数据一览", GetSearchData);//GetSearchData可以传datatable 或者datagridview下面代码是传递Datatable的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/// <summary> 
          
/// 查询的数据导出为Excel 
          
/// </summary> 
          
/// <param name="fileName">导出文件名</param> 
          
/// <param name="myDGV">导出的datatable数据</param> 
          
private 
void 
ExportExcel(
string 
fileName, MDataTable myDGV) 
          
               
string 
saveFileName = 
""
               
SaveFileDialog saveDialog = 
new 
SaveFileDialog(); 
               
saveDialog.DefaultExt = 
"xls"
               
saveDialog.Filter = 
"Excel文件|*.xls"
               
saveDialog.FileName = fileName; 
               
saveDialog.ShowDialog(); 
               
saveFileName = saveDialog.FileName; 
               
if 
(saveFileName.IndexOf(
":"
) < 0) 
return
//被点了取消 
               
Microsoft.Office.Interop.Excel.Application xlApp = 
new 
Microsoft.Office.Interop.Excel.Application(); 
               
if 
(xlApp == 
null
               
                    
MessageBox.Show(
"无法创建Excel对象,可能您的机子未安装Excel"
); 
                    
return
               
   
               
Microsoft.Office.Interop.Excel.Workbooks workbooks = xlApp.Workbooks; 
               
Microsoft.Office.Interop.Excel.Workbook workbook = 
 
workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet); 
               
Microsoft.Office.Interop.Excel.Worksheet worksheet = 
 
(Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
//取得sheet1 
   
   
               
//写入标题 
               
for 
(
int 
i = 0; i < myDGV.Columns.Count; i++) 
               
                    
worksheet.Cells[1, i + 1] = myDGV.Columns[i].ColumnName; 
                    
//标题 
                    
Microsoft.Office.Interop.Excel.Range titleRange = worksheet.Range[worksheet.Cells[1, 1],  
worksheet.Cells[1, i + 1]];
//选中标题 
                    
titleRange.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter; 
//水平居中 
               
               
//写入数值 
               
for 
(
int 
r = 0; r < myDGV.Rows.Count; r++) 
               
                    
for 
(
int 
i = 0; i < myDGV.Columns.Count; i++) 
                    
                         
worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r][i].Value; 
                         
//设置边框 
                         
Microsoft.Office.Interop.Excel.Range allRange = worksheet.Range[worksheet.Cells[1, 1],  
worksheet.Cells[r + 1, i + 1]]; 
                         
allRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; 
                    
                    
System.Windows.Forms.Application.DoEvents(); 
               
               
//设置最后一行边框 
               
Microsoft.Office.Interop.Excel.Range endRange = worksheet.Range[worksheet.Cells[1, 1],  
worksheet.Cells[myDGV.Rows.Count + 1,myDGV.Columns.Count]]; 
               
endRange.Borders.LineStyle = Microsoft.Office.Interop.Excel.XlLineStyle.xlContinuous; 
               
worksheet.Columns.EntireColumn.AutoFit();
//列宽自适应 
               
if 
(saveFileName != 
""
               
                    
try 
                    
                         
workbook.Saved = 
true
                         
workbook.SaveCopyAs(saveFileName); 
                    
                    
catch 
(Exception ex) 
                    
                         
MessageBox.Show(
"导出文件时出错,文件可能正被打开!\n" 
+ ex.Message); 
                    
   
               
               
xlApp.Quit(); 
               
GC.Collect();
//强行销毁 
               
MessageBox.Show(
"文件: " 
+ fileName + 
".xls 保存成功"
"信息提示"
, MessageBoxButtons.OK, MessageBoxIcon.Information); 
          

 

其他DataGridview导出Excel的资料:

http://www.360doc.com/content/11/1211/17/8147167_171489298.shtml  winform应用使用DataGridView数据导出到Excel

http://ruantnt.blog.163.com/blog/static/190525452201110185199346/  winform(c#) DataGridView导出Excel 

http://hi.baidu.com/wenshangang/item/1227f415fab1a35a2a3e229f  Winform中dataGridView控件导出到excel表格中

http://blog.sina.com.cn/s/blog_62cd5a980101905a.html  WinForm中DataGridView导出为Excel(快速版)

http://www.cr173.com/html/7906_1.html  WinForm下DataGridView导出Excel的实现

 

 

参考文章

1.  原文地址 .

2., ,2014-5.

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
  本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/5787411.html,如需转载请自行联系原作者
你可能感兴趣的文章
Hystrix断路器在微服务网关中的应用
查看>>
这可能是把ZooKeeper概念讲的最清楚的一篇文章
查看>>
Fis3构建迁移Webpack之路
查看>>
关于HTTP的一些基本概念
查看>>
手把手教你将单机游戏改造成对战网游(附详细教程)
查看>>
React-Native flex 布局使用总结
查看>>
基于 Docker for MAC 的 Kubernetes 本地环境搭建与应用部署
查看>>
单例模式--SingleTon
查看>>
Choerodon猪齿鱼直播分享 | 华润置地中台转型实践分享
查看>>
iOS自定义UIPageControl
查看>>
来,搞个侧栏导航
查看>>
结合 Laravel 初步学习 GraphQL
查看>>
05.java多线程问题
查看>>
新功能:在负载均衡SLB控制台上查看DDoS安全防护阈值
查看>>
项目集成springboot【JWordpres前台项目实战】
查看>>
小知识三、USerDefault我换个姿势来实现
查看>>
JavaWeb项目架构之NFS文件服务器
查看>>
Activity事件分发机制
查看>>
设计模式快速学习(三)单例模式
查看>>
原生JS操作DOM
查看>>