导入英语模板
①、获取excel中的多个sheet
#region 获取上传的Excel的所有的sheet名字的集合
//获取全部Sheet名
public ArrayList ExcelSheetName(string filepath)
{
string strConn;
strConn = "Provider=Microsoft.Ace.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties='Excel 12.0;HDR=Yes;IMEX=2'";
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
DataTable dtsheetNames = conn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
ArrayList strTableNames = new ArrayList();
conn.Close();
for (int k = 0; k < dtsheetNames.Rows.Count; k++)
{
strTableNames.Add(dtsheetNames.Rows[k]["TABLE_NAME"].ToString());
}
return strTableNames;
}
#endregion
②、在字典表中查找sheet对应的英语名称
③、获取待导入的数据库的表名
④、获取题库表的第一条数据,取出对应题型中excel中应该包含的字段
/// <summary>
/// 获取题库表的第一条数据,为获得表结构--郑浩
/// </summary>
/// <param name="strCourseID">课程ID</param>
/// <param name="CourseType"></param>
/// <returns></returns>
public ArrayList GetExcelColumns(string TableName)
{
ArrayList strExcelColumns = new ArrayList();//用于保存查询出来的对应题型的需要包含的字段
try
{
DataTable tdQueryType = new DataTable();
StringBuilder strSql = new StringBuilder();
strSql.Append("select * from ");
strSql.Append(TableName + " limit 1");
tdQueryType = MySQLHelper.ExecuteDataTable(strSql.ToString());//获得第一条数据
//取出对应题型中excel中应该包含的字段
for (int i = 0; i < tdQueryType.Columns.Count; i++)
{
//去除表中与excel不对应的字段
if ((tdQueryType.Columns[i].ToString()).ToUpper() == "ADDUSER" || (tdQueryType.Columns[i].ToString()).ToUpper() == "REMARK" || (tdQueryType.Columns[i].ToString()).ToUpper() == "TIMESTAMP" || (tdQueryType.Columns[i].ToString()).ToUpper() == "OTHER1")
//|| (tdQueryType.Columns[i].ToString()).ToUpper() == "OTHER2"
{
continue;
}
strExcelColumns.Add(tdQueryType.Columns[i].ToString());
}
}
catch (System.Exception message)
{
throw new Exception("获取Excel中应有字段名失败 " + message.Message);
}
return strExcelColumns;
}
⑤、将获取的英文字段转换为中文字段
⑥、判断上传的excel中是否有多余的列和全部的字段
//判断上传的excel中是否有多余的列
if (dtCurrent.Columns.Count != headfields.Count)
{
Response.Write("<script>alert('待导入的模板中存在多余的列(空值列),请检查模板格式或重新下载模板!')</script>");
return null;
}
//判断dtCourse中是否包含全部要求的字段
for (int j = 0; j < headfields.Count; j++)
{
// //只要有一个字段不被包含,则提示"数据源缺少必要的字段",并退出循环和整个方法
if (!dtCurrent.Columns.Contains(headfields[j].ToString()))
{
string a = headfields[i].ToString();
string msg = "数据源缺少必要的字段, " + headfields[j].ToString() + " 请检查数据源!";
Response.Write("<script>alert("+ msg + ")</script>");
return null;
}
}
////判断数据源中是否有数据
if (dtCurrent.Rows.Count == 0)
{
Response.Write("<script>alert('Excel文件中没有任何数据,请填充数据!')</script>");
//退出方法
return null;
}