Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 使用C#删除不必要的#x201C;表u NAME”;从Excel工作表_Asp.net Mvc 4_C# 4.0 - Fatal编程技术网

Asp.net mvc 4 使用C#删除不必要的#x201C;表u NAME”;从Excel工作表

Asp.net mvc 4 使用C#删除不必要的#x201C;表u NAME”;从Excel工作表,asp.net-mvc-4,c#-4.0,Asp.net Mvc 4,C# 4.0,谁能告诉我,我要上传excel文件,这个文件有一些不必要的表格,比如“_xlnm#Print_Titles”,我需要删除这个字段。这是我的方法。但它不适用于删除或删除 static string[] GetExcelSheetNames(string connectionString) { OleDbConnection con = null; DataTable dt = null; con = new OleDbConnection(connectionString

谁能告诉我,我要上传excel文件,这个文件有一些不必要的表格,比如“_xlnm#Print_Titles”,我需要删除这个字段。这是我的方法。但它不适用于删除或删除

static string[] GetExcelSheetNames(string connectionString)
{
    OleDbConnection con = null;
    DataTable dt = null;

    con = new OleDbConnection(connectionString);
    con.Open();

    dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);           

    if ((dt == null) )
    {
        return null;
    }

    String[] excelSheetNames = new String[dt.Rows.Count];

    int i = 0;

    foreach (DataRow row in dt.Rows)
    {
        excelSheetNames[i] = row["TABLE_NAME"].ToString();

        if ((excelSheetNames[i].Contains("_xlnm#Print_Titles") || (excelSheetNames[i].Contains("Print_Titles"))))
        {
            if (true)
            {
                row.Table.Rows.Remove(row);
                dt.AcceptChanges();
            }
        }

        i++;
    }

    return excelSheetNames;
}

我们不会删除foreach循环中的项,而是找到它们并将它们添加到列表中,然后遍历该列表并将它们从数据表中删除

static string[] GetExcelSheetNames(string connectionString)
    {
        OleDbConnection con = null;
        DataTable dt = null;

        con = new OleDbConnection(connectionString);
        con.Open();

        dt = con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

        if ((dt == null))
        {
            return null;
        }

        String[] excelSheetNames = new String[dt.Rows.Count];

        var rowsToRemove = new List<DataRow>();
        for (int i = 0; i < dt.Rows.Count; i++)
        {
            var row = dt.Rows[i];
            excelSheetNames[i] = row["TABLE_NAME"].ToString();

            if ((excelSheetNames[i].Contains("_xlnm#Print_Titles") || (excelSheetNames[i].Contains("Print_Titles"))))
            {
                   rowsToRemove.Add(dt.Rows[i]);
            }

            i++;
        }

        foreach (var dataRow in rowsToRemove)
        {
            dt.Rows.Remove(dataRow);
        }

        return excelSheetNames;
    }
静态字符串[]GetExcelSheetNames(字符串连接字符串)
{
OLEDB连接con=null;
数据表dt=null;
con=新的OLEDB连接(connectionString);
con.Open();
dt=con.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
如果((dt==null))
{
返回null;
}
String[]excelSheetNames=新字符串[dt.Rows.Count];
var rowsToRemove=新列表();
对于(int i=0;i
那些xlnm和“$”是用户通常不应该访问的表单

你可以用两种方法来解决这个问题

  • 别理他们

  • 放下它们

  • 强烈推荐前者

    为此,您需要使用以下代码:

    if (!dt.Rows[i]["Table_Name"].ToString().Contains("FilterDatabase") && !dt.Rows[i]["Table_Name"].ToString().EndsWith("$'"))
    {
    }
    

    您可以使用
    .Contains()
    和/或
    .EndsWith()
    筛选出这些工作表。

    从正在枚举的列表中删除项目是个坏主意。(不要删除foreach循环中的项)。我建议对该任务进行do-while循环。如果(true)
    此方法现在返回以下值[0]“'Bob-169$”[1]null[2]“Annl”[3]null[4]Print_TitlesI删除底部区域重复i++,那么您的推理是什么;但仍然没有删除打印标题。为什么?但仍然没有删除打印标题。有没有办法删除打印标题?我调试了代码,dt已经删除了打印标题,但返回了excelSheetNames;方法仍然保留打印标题。为什么会这样?