【问题标题】:how to check which sheet is empty in excel workbook in C#?如何在 C# 的 excel 工作簿中检查哪个工作表为空?
【发布时间】:2020-08-05 16:18:55
【问题描述】:

我正在 c# 应用程序中访问 excel 工作簿。我正在使用列表lstSheetsEx 向用户显示工作表名称。但我想在向用户显示之前排除空工作表。

        using (OleDbConnection connExcel = new OleDbConnection(DatabaseObjects.ConnectionStringExcel))
        {
            connExcel.Open();
            DataTable dtSchema = connExcel.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
            List<string> lstSheetsEx = dtSchema.AsEnumerable()
                   .Select(r => r.Field<string>("TABLE_NAME").Trim(new char[] { '\'', '$' })).ToList();
        }
   

【问题讨论】:

    标签: c# excel datatable oledb


    【解决方案1】:

    您可以尝试以下代码来显示工作表名称排除空工作表。

    代码:

     class Program
        {
            static void Main(string[] args)
            {
                var list = Checknullsheet("D:\\3.XLSX");
                list.ForEach(p => Console.WriteLine(p));
                Console.ReadKey();
            }
            public static List<string> Checknullsheet(string FileName)
            {
    
                DataSet set = new DataSet();
                int totalSheet = 0; //No of sheets on excel file  
                using (OleDbConnection objConn = new OleDbConnection(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + FileName + ";Extended Properties='Excel 12.0;HDR=YES;IMEX=1;';"))
                {
                    objConn.Open();
                    DataTable dt = objConn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                    string sheetName = string.Empty;
                    List<string> sheetlist = new List<string>();
                    DataTable table = new DataTable();
                    if (dt != null)
                    {
                        var tempDataTable = (from dataRow in dt.AsEnumerable()
                                             where !dataRow["TABLE_NAME"].ToString().Contains("FilterDatabase")
                                             select dataRow).CopyToDataTable();
                        dt = tempDataTable;
                        totalSheet = dt.Rows.Count;
                        for (int i = 0; i < totalSheet; i++)
                        {
                            table = makeDataTableFromSheetName(FileName, dt.Rows[i]["TABLE_NAME"].ToString());
                            table.TableName = dt.Rows[i]["TABLE_NAME"].ToString();
                            set.Tables.Add(table);
                            sheetlist.Add(dt.Rows[i]["TABLE_NAME"].ToString());
                        }
                        sheetName = dt.Rows[0]["TABLE_NAME"].ToString();
                    }
    
                    foreach (DataTable item in set.Tables)
                    {
                        if(item.Rows.Count<=0)
                        {
                            sheetlist.Remove(item.TableName);
                        }
                    }
                    objConn.Close();
                    return sheetlist; //Returning Dattable  
                }
            }
            private static DataTable makeDataTableFromSheetName(string filename, string sheetName)
            {
                System.Data.OleDb.OleDbConnection myConnection = new System.Data.OleDb.OleDbConnection(
                "Provider=Microsoft.ACE.OLEDB.12.0; " +
                "data source='" + filename + "';" +
                "Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\" ");
    
                DataTable dtImport = new DataTable();
                System.Data.OleDb.OleDbDataAdapter myImportCommand = new System.Data.OleDb.OleDbDataAdapter("select * from [" + sheetName + "]", myConnection);
                myImportCommand.Fill(dtImport);
                return dtImport;
            }
        }
    

    结果:

    【讨论】:

    • 有没有办法用OleDb做到这一点?
    • @MuhammadRizwan,正如你所说,我已经更新了我的代码。请检查一下。
    • 可以从数据表table而不是列表sheetlist中删除空工作表名称吗?
    • FilterDatabase的作用是什么?
    • 你为什么使用tempdataTable。这有什么需要?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-18
    相关资源
    最近更新 更多