- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 OleDbConnection 从 .xlsx 工作簿中检索数据。当我检索工作表列表时,它无法确定是否有任何工作表被隐藏。过去是这样的,它的名称以下划线结尾,例如“Sheet1$_”。你现在知道如何判断它是否隐藏了吗?
using (var connection =
new OleDbConnection(string.Concat("Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Data Source=",
fileName,
";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"")))
using (var command = new OleDbCommand("", connection))
{
connection.Open();
var listedSheets = connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
new object[] {null, null, null, "Table"});
if (listedSheets != null)
{
var sheetNames = new List<string>(listedSheets.Rows.Count);
foreach (DataRow row in listedSheets.Rows)
{
sheetNames.Add(row[2].ToString());
}
return sheetNames;
}
return new List<string>();
}
最佳答案
我认为 GetOleDbSchemaTable
不是这里的最佳选择
因为无论数据源是 Excel、Access 还是其他,它都会返回 DataTable 对象。因此,它不知道任何 Excel 工作表属性
相反,您可以使用 Excel com 组件来完全控制您的 Excel 文件
步骤
将以下行添加到您的应用程序中
使用 Excel = Microsoft.Office.Interop.Excel;
读取加载表单的Visible
属性
示例代码
private static Excel.Workbook MyBook = null;
private static Excel.Application MyApp = null;
private static Excel.Worksheet MySheet = null;
static void ReadExcel()
{
MyApp = new Excel.Application();
MyApp.Visible = false;
MyBook = MyApp.Workbooks.Open("C:\\test.xlsx");
MySheet = (Excel.Worksheet)MyBook.Sheets[1];
if (MySheet.Visible == Excel.XlSheetVisibility.xlSheetHidden)
{
//handle hidden sheet here
}
}
注意事项:
选择正确的 COM 引用可能取决于您的 Visual Studio 版本 Check this SO question
关于c# - .xlsx 的 OleDbConnection.GetOleDbSchemaTable 无法识别隐藏的工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39080970/
当我尝试此代码时 OleDBConnection.open() 不起作用并且没有抛出任何错误,只需打开窗口窗体并说出任何我看到的 messageBox try1 但程序没有显示 try2 是什么我的连
我已经编写了用于将数据插入到 excel 表中的代码。我的代码不会引发任何异常,并且每次 excel 文件的大小都会增加 1KB。但是当我打开工作表时,它没有显示任何数据。 我很困惑,无法弄清楚问题所
所以,我有与C#/ASP.NET Oledb - MS Excel read "Unspecified error"中描述的相同的症状,但是我的my answer似乎没有修复它。即使总是关闭 OleD
Related Question 即使在我对初始化的 OleDbException 调用 dispose 之后,我的代码也不会释放文件句柄。有没有办法显式强制程序释放文件句柄? 最佳答案 默认情况下,
我正在使用 OleDatabase 连接连接到 Access 数据库。问题是我需要以编程方式在数据库上运行压缩和修复操作,但是当仍然有与数据库的打开连接时我不能这样做。存在的连接当然是来 self 程
C# 相当新,无论如何,我有我编写的这个 Initialise 方法,它基本上创建到 MS2007 Access 数据库的连接,用 4 个数据表填充数据集,这些数据表是一些查询的结果。 pub
我在这里使用 OleDbConnection 作为连接字符串,但我在行中收到错误 if (conn.State == ConnectionState.Closed) Error as CS0019:
C#、.Net 2.0:我有一个类包装来自通过 OleDbConnection 对象访问的数据库的单个记录。这很简单,它执行一个“SELECT * FROM table WHERE key = {so
我尝试使用以下连接字符串连接到远程 SQL Anywhere 10 数据库服务器,但收到“未找到数据库服务器”错误。 OleDbConnection conn = new OleDbConnectio
我在使用 OleDbConnection 从文本文件中读取非 ASCII 字符时遇到问题。有任何想法吗? 这是我用来重现问题的测试方法: [TestMethod] public void TestMe
我正在尝试连接到包含两个表的数据库。但是,在我尝试登录后,出现错误。该错误表明零点处没有行。我认为这是因为我的连接: using System; using System.Collections.Ge
我的制表符分隔文件是这样的: ISO ISO3 ISO-Numeric AD AND 20 我一直在尝试以下代码,但没有成功。 OleDbConnection cn = new OleDbC
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Is there any need to close a DbConnection if a using c
显然 ( MSDN ) 有时 OleDbConnection.ResetState() 什么都不做,所以即使连接失败 OleDbConnection.State 仍将设置为打开。我正在为此寻找最佳解决
我必须使用 OleDbConnection 来创建一个新的 excel 文件,但是当我用这个字符串打开连接时: OleDbConnection excelConnection =
我正在构建一个 ssis 包,我希望在脚本组件中使用现有的 OleDbConnection。这是我的代码: public override void AcquireConnections(object
我在 OleDbConnection Access 同一网络中 Windows 共享上的 .mdb 文件时遇到问题。当它在使用部分结束时被处理,需要超过 2 秒。打开连接并执行查询或填充 DataTa
The 'Microsoft.ACE.OLEDB.12.0' provider is not registered on the local machine. 我知道这个的常见修复方法是安装: Mic
谁能帮我解决一个我似乎无法解决的问题。我在用于桌面的 VSE2012 express 和用于桌面的 VSE2013 express 中创建了一个 C# 表单,其中我将表单保留为默认大小并再次添加一个完
我有 MS Access 数据库,其中包含 Columns,其中 Names 具有丹麦语字符。例如Døbt 当程序在丹麦位置的 PC 上运行时,一切正常,但在乌克兰位置的 PC 上,我收到错误消息,指
我是一名优秀的程序员,十分优秀!