C#读Excel时如果sheet名不对报错的解决方案.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
![preview](https://dl-preview.csdnimg.cn/87651888/0001-62ee6bfa7424ac62a1d05041a06917ac_thumbnail.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
在C#编程中,处理Excel文件是常见的任务之一。然而,当尝试访问Excel工作表(Sheet)时,如果工作表的名称与预期不符,程序可能会抛出错误。本篇文章将探讨如何解决这个问题,并提供一种动态获取Excel文件中所有工作表名称的方法。 首先,让我们分析错误信息:“'Sheet1$' 不是一个有效名称。请确认它不包含无效的字符或标点,且名称不太长。”这个错误提示意味着程序正在尝试访问名为"Sheet1$"的工作表,但该工作表可能不存在或者其名称已被更改。在C#中,通常使用`OleDb`连接来读取Excel文件,如示例代码所示: ```csharp string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + Path + ";" + "Extended Properties=Excel 8.0;"; OleDbConnection conn = new OleDbConnection(strConn); conn.Open(); string strExcel = "select * from [sheet1$]"; OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, strConn); DataTable dt = new DataTable(); myCommand.Fill(dt); return dt; ``` 这段代码的问题在于它硬编码了工作表的名称为"Sheet1$"。为了避免这样的问题,我们需要能够动态地获取Excel文件中存在的所有工作表名称。 以下是使用`OleDbConnection.GetOleDbSchemaTable()`方法来获取工作表名称的解决方案: ```csharp using System.Data; using System.Data.OleDb; // ... public List<string> GetSheetNamesFromExcel(string path) { string connectionString = $"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={path};Extended Properties=\"Excel 8.0;HDR=YES;\""; using (OleDbConnection connection = new OleDbConnection(connectionString)) { connection.Open(); // 获取所有表的信息 DataTable schemaTable = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); // 过滤出Excel工作表,排除系统隐藏的表 List<string> sheetNames = schemaTable.AsEnumerable() .Where(row => row.Field<string>("TABLE_TYPE") == "Worksheet" && !row.Field<string>("TABLE_NAME").StartsWith("_")) .Select(row => row.Field<string>("TABLE_NAME")) .ToList(); return sheetNames; } } ``` 上述代码首先建立一个`OleDbConnection`实例并打开连接。然后,调用`GetOleDbSchemaTable()`方法,传入`OleDbSchemaGuid.Tables`以获取所有表的信息。我们过滤出类型为“Worksheet”的表,排除可能存在的系统隐藏表(通常以下划线开头)。最后,将工作表名称转换为`List<string>`返回。 现在,你可以先调用`GetSheetNamesFromExcel()`方法获取Excel文件中的所有工作表名称,然后根据用户的选择动态构建SQL查询语句,避免因工作表名称错误导致的异常。 总结来说,处理C#读取Excel文件时,为防止因工作表名称错误导致的异常,应使用`GetOleDbSchemaTable()`方法获取所有可用的工作表列表,而不是硬编码工作表名称。这样可以确保程序具有更好的健壮性和用户友好性。在实际开发中,还应注意处理不同版本的Excel文件(如Excel 2003和Excel 2007+),因为它们可能需要不同的连接字符串和数据提供者。例如,对于Excel 2007及更高版本,应使用`Microsoft.ACE.OLEDB.12.0`而非`Microsoft.Jet.OLEDB.4.0`。
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![doc](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/release/download_crawler_static/87651888/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 9677
- 资源: 9657
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
- 电气类117、变电站真实巡检电力设备检测数据集(7500多张+15类+YOLO格式txt标签)-第二部分
- 电气类、117.变电站真实巡检电力设备检测数据集(7500多张+15类+YOLO格式txt标签)-第一部分
- IMG_20180720_124347_01.jpg
- IMG20240621095811.jpg
- jQuery 库.docx
- 基于 C 实现的图像处理(BMP)课程设计
- ST MCSDK 6.3.0
- 基于 C++实现的虚拟航班订票系统【C++课程设计】
- 111111111111111111
- 海信智能电视刷机数据 LED43K5100U(0000) 生产用软件数据 务必确认机编一致 强制刷机 整机USB升级程序
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)