Asp.net mvc 4 使用C#删除不必要的#x201C;表u NAME”;从Excel工作表
谁能告诉我,我要上传excel文件,这个文件有一些不必要的表格,比如“_xlnm#Print_Titles”,我需要删除这个字段。这是我的方法。但它不适用于删除或删除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
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;方法仍然保留打印标题。为什么会这样?