VS2013中Winform导出Excel文件时报“object”未包含“get_Range”的定义解决方法

.NET Framework 1.0到4.0演进本质:设计哲学与底层机制解构 .NET Framework并非单纯的功能叠加,而是面向不同硬件约束、部署环境与开发范式的系统性抽象升级。其核心围绕CLR运行时机制、内存管理模型(如分代GC、LOH优化)、异步与并发模型(TPL/async)、声明式编程(LINQ/Expression Tree)及安全模型(CAS→Claims→RBAC)持续演进。理解这些底层原理,有助于规避GAC冲突、GC风暴、线程阻塞、序列化异常等典型问题,并支撑.NET Framework向.NET Core/.NET 5+的平滑迁移。本文聚焦1.0至4.0关键版 阅读详情

由于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]];


在VS2013中调用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

get_Range method missing with embedded interop assembly


winform导出Excel代码:

使用方法:    ExportExcel("条形码数据一览", GetSearchData);//GetSearchData可以传datatable 或者datagridview

下面代码是传递Datatable的

 /// <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的实现


喷涂工艺SCADA上位机:Winform实现的生产级exe系统 SCADA系统是工业自动化中实现数据采集、监控报警、历史追溯与报表输出的核心技术体系;Winform作为成熟稳定的桌面GUI框架,在资源受限、网络不稳、兼容性要求高的车间现场仍具不可替代性。其原理在于依托.NET Framework原生运行时,通过GDI+轻量渲染、内存映射缓存、S7CommPlus协议直连PLC等机制,保障毫秒级响应与断网续传能力。技术价值体现在交付即用(单文件exe)、免环境依赖、低硬件门槛与高鲁棒性,广泛适用于汽车零部件、涂装产线、中小型离散制造等场景。本文详解一个连续稳定运行14个月 阅读详情

相关推荐

WinForm集成YOLOv26-obb旋转框检测实战指南

旋转框检测(OBB)是工业视觉中处理倾斜目标的核心技术,其原理在于通过sinθ/cosθ参数建模方向性,规避角度周期性回归失稳;相比标准YOLO,需额外解析4维方向参数并重构后处理逻辑。技术价值体现在高精度定位能力,尤其适用于PCB元件、无人机航拍、AOI光学检测等场景。在Windows桌面端落地时,C#与WinForm框架面临ONNX模型加载、DPI感知绘图、UI线程阻塞、GDI+资源泄漏等系统级挑战。本文聚焦YOLOv26-obb这一典型OBB模型在WinForm中的端到端部署,覆盖ONNX推理、坐标系

weixin_33863087的博客 389

C#将数据导入到excel中 出现 “object”未包含“get_Range”的定义报错

C#将数据导入到excel中 出现 “object”未包含“get_Range”的定义 该问题的解决办法是:将下面的行1修改成行2的形式,这样就解决了。              行1: workSheet.get_Range(workSheet.Cells[2,1],workSheet.Cells[rowCount+1,colCount]).Value2=data;         

ibet1224的专栏 1679

C++(VS2010)实现导出到Excel

VS2010(C++)MFC应用程序,List Control控件中数据导出到Excel VS2010,XP,Excel2003

asp.net 导出EXCEL 报错未包含 get_Range 的定义

using Excel; Application app = new Application(); if (app == null) { return; } app.Visible = false; app.UserControl = true; Workbooks workbooks = app.Workb

luboxy的专栏 2243

VS2013 C++用list control 导入导出EXCEL2010/2003文件

VS2013 C++用list control 导入导出EXCEL2010/2003文件,导入(只做了简单插入,文件导入listcontrol后面上传),导出自定义路径和文件名,导出数据后自动获取文件名显示文件,对新手来说,网上的代码一个小错误都要好久才解决,附件代码(已调试)供新手学习,希望有所帮助。

C++使用VS2010导出Excel的方法及步骤

C++使用VS2010导出Excel的方法及步骤 仅供参考

写入EXCEL “object”未包含“get_Range”的定义

Range range = excel.get_Range(excel.Cells[1, 1], excel.Cells[1, 10]); 把这句话改成 Range range = excel.Range[excel.Cells[1, 1], excel.Cells[1, 10]]; 我分析我的问题产生的原因是  我更换了Framrwork的版本(3.5---4),按照上面的方式把get_R

涛哥向上专栏 4642

C#导出 Excel和图形 Vs2010

本人自己整理了C#导出Excel和图形方法。 导出Excel只有一个工作目录,导出图形会有多个工作目录。 希望大家能够喜欢 如有疑问,欢迎留言。

VC操作Excel,使用Worksheet的get_Range发生异常

问题的现象比较怪: 如果传入的单元格地址为"A1","CC222"等,则工作正常; 但若传入"DDD33","XYZ33"等比较大的列地址,则发生异常。 经过大半天的调试,最终发现原来是excel文件和打开方式的问题。 在本人的机器上,安装的是excel2007,测试用的是一个xls文件(2007之前的一个版本,具体的版本未知)。 用2007打开老版本的文件,可以看到,标题上显式着“兼容

tiewen的专栏 3676

VS2013 读写excel表格数据

在VS2013平台上,使用MFC对话框编程,实现对excel表格数据的读写

机器视觉/将HIK海康面阵相机连接Halcon软件

本文简述了如何将海康面阵相机连接到Halcon软件中进行实时取图的过程。

Dahe.qu 4866

c#导出excel添加单元格的边框,提示object 未包含get_range的定义

由于之前的项目有过excel操作类,直接拿来用,但是总是提示object 未包含get_range的定义 Range range = excel.get_Range(excel.Cells[1, 1], excel.Cells[1, 10]); 把这句话改成 Range range = excel.Range[excel.Cells[1, 1], excel.Cells[1, 10]]; 问题产...

qq_14988655的博客 1187

量化投资从0开始系列 ---- 15. 郑商所日统计数据

前面已经提取了其它期货交易所的数据,最后还剩下郑商所。相比而言,郑商所的数据获取比其它几个交易所更麻烦一点。因为郑商所的系统接口有两个,在2015年11月11日前后发生了切换,这个日期之前是老系统的api接口,这个日期之后是一个新的api接口。 具体的地址在哪里,还是依靠在浏览器中按F12来确定,最后发现的地址是: if trade_date > '20151111': czce_url = f'http://www.czce.com.cn/cn/DFSS

kengxie的博客 2112

object does not contain a definition for get_range

  原因[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 returni...

weixin_34212762的博客 1609

(入门向)在Ubuntu22.04.3安装Matlab2021b,以及无法安装在当前目录下的解决办法(见最后)

还有这个/usr/local是只读状态,我试过sudo chmod..去改那个文件的读,结果还是安装不了,我不是这个默认路径,因为它文件夹还是只读,于是我在matlab2021b下创了一个bin,并选上。输入完成后,依次按y,因为里面有三个文件,他会让你确定3次密码,直接yyy跳过即可。你可能会遇到装不下的情况,这个软件占30g,可是你分配给虚拟机就剩10g。,于是我去Downloads下建了一个matlab2021b文件夹,果然好使,3).此时,会提示你输入密码,因为这个rar是有密码的,

harrype的博客 7285

中科蓝讯Downloader配置实战:从软硬开关机到ANC降噪的完整指南

本文提供了中科蓝讯Downloader工具的详细配置实战指南。内容涵盖从基础的软硬开关机选择与配置,到核心的EQ音效调试、触摸按键与入耳检测优化,以及高阶的ANC降噪与电源管理设置。旨在帮助开发者快速掌握关键配置项,高效完成蓝牙耳机产品的功能调试与优化。

s4t5u6v7的博客 508

EXCEL获取单元格内容方法

 在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 obj

Andrewniu的博客 5674

CAPL 中的变量类型详解与应用

CAPL 中的变量类型详解与应用

qq_42268594的博客 1448

导出excel报错:object 未包含get_range的定义

修改前 //删除某一行 worksheet.get_Range(app.Cells[2, 1], app.Cells[2, 32]).EntireRow.Delete(Microsoft.Office.Interop.Excel.XlDirection.xlUp); 修改后 //删除某一行 worksheet.Range[app.Cells[2, 1], app.Cells[2, 32]].EntireRow.Delete(Microso...

zgscwxd的博客 930

Linux下自动化解析q7签名文件的有效期与时间戳

本文详细介绍了在Linux环境下自动化解析q7签名文件有效期与时间戳的方法。通过编写高效脚本,开发者可以批量提取签名时间信息,验证签名有效性,并集成到CI/CD流程中。文章提供了完整的脚本实现,包括错误处理、批量处理功能,并解决了常见环境问题,特别适用于国产操作系统如UOS的开发场景。

weixin_30872499的博客 520

Python OpenCV教程从入门到精通的全面指南【文末送书】

全书共分为16章,包括Python与OpenCV、搭建开发环境、图像处理的基本操作、像素的操作、色彩空间与通道、绘制图形和文字、图像的几何变换、图像的阈值处理、图像的运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别以及MR智能视频打卡系统。主流技术,全面覆盖:本书内容丰富,涵盖了Open CV图像处理技术的方方面面,如图像的几何变换、阈值处理、图像运算、模板匹配、滤波器、腐蚀与膨胀、图形检测、视频处理、人脸检测和人脸识别等。此外,通过对比原图,可更直观地看到图像经过处理后的效果。

一键难忘的博客 9075

Excel 使用AutoFill提示“类Range的AutoFill方法无效”

  今天遇到一个神奇的问题,之前一直使用很好的代码突然报错:“类Range的AutoFill方法无效”,在网上搜索了一番,感觉没有一个与我遇到的情况相同的。debug,查看一下代码,发现程序里,AutoFill前后指定的是相同的区域。不知道是不是因为这个原因,只能自己手动测试到底什么情况才会产生这个提示了。   写了一段测试代码:           Worksheet she...

weixin_33962923的博客 5488

【JCR一区级】鱼鹰算法OOA-CNN-LSTM-Attention故障诊断分类预测【含Matlab源码 5711期】

鱼鹰算法OOA-CNN-LSTM-Attention故障诊断分类预测 完整代码和数据,方可运行;数据可直接替换,适合小白!可提供运行操作视频!

订阅付费专栏Matlab(奶茶价版)或下载付费资源,可赠送奶茶价版付费专栏指定代码1份; 3601
上一篇: Linq 多条件查询组合问题
下一篇: Winform 调用WebService程序 图文
蝶恋花雨
博客等级 码龄21年 1290粉丝 147原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值