try
{
string fullfilename = this.FileUpload1.PostedFile.FileName;
string filename = fullfilename.Substring(fullfilename.LastIndexOf("\\") + 1);
string type = fullfilename.Substring(fullfilename.LastIndexOf(".") + 1);
if (type != "xls")
{
Jscript.Alert("您选择的文件不正确!");
}
else
{
string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fullfilename + ";Extended Properties=Excel 8.0";
OleDbConnection cnnxls = new OleDbConnection(mystring);
OleDbDataAdapter myDa = new OleDbDataAdapter("select * from [Sheet1$]", cnnxls);
DataSet myDs = new DataSet();
myDa.Fill(myDs); if (myDs.Tables[0].Rows.Count > 0)
{
string strSql = "";
for (int i = 0; i <= myDs.Tables[0].Rows.Count; i++)
{
try
{
int df = i;
a .Save(
myDs.Tables[0].Rows[i].ItemArray[0].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[1].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[2].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[3].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[4].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[5].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[6].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[7].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[8].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[9].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[10].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[11].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[12].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[13].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[14].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[15].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[16].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[17].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[18].ToString().Trim(),
myDs.Tables[0].Rows[i].ItemArray[19].ToString().Trim()); }
catch
{
zf += zf;
zf2 = zf.ToString() + ",";
int adsfdfasd = i;
string asdfas1 = myDs.Tables[0].Rows[i].ItemArray[0].ToString().Trim();
string asdfas2 = myDs.Tables[0].Rows[i].ItemArray[1].ToString().Trim();
string asdfas3 = myDs.Tables[0].Rows[i].ItemArray[2].ToString().Trim();
string asdfas4 = myDs.Tables[0].Rows[i].ItemArray[3].ToString().Trim();
string asdfas5 = myDs.Tables[0].Rows[i].ItemArray[4].ToString().Trim();
string asdfas6 = myDs.Tables[0].Rows[i].ItemArray[5].ToString().Trim();
string asdfas7 = myDs.Tables[0].Rows[i].ItemArray[6].ToString().Trim();
string asdfas8 = myDs.Tables[0].Rows[i].ItemArray[7].ToString().Trim();
string asdfas9 = myDs.Tables[0].Rows[i].ItemArray[8].ToString().Trim();
string asdfas10 = myDs.Tables[0].Rows[i].ItemArray[9].ToString().Trim();
string asdfas11 = myDs.Tables[0].Rows[i].ItemArray[10].ToString().Trim();
string asdfas12 = myDs.Tables[0].Rows[i].ItemArray[11].ToString().Trim();
string asdfas13 = myDs.Tables[0].Rows[i].ItemArray[12].ToString().Trim();
}
}
Jscript.Alert("导入成功!");
}
} }
catch
{
Jscript.Alert("导入失败!" + zf2);
}
源码如上。
但你其中有一个错误:
for (int i = 0; i <= myDs.Tables[0].Rows.Count; i++)
{}
红色标记就为<
在以往读取Excel文件时常常出现读取某些字段为null值,其实是有值,原因是读取文件时,Excel会以第一行的数据类型为参考,如果后边的与其不一致,则会出现些问题。
以下一个朋友的解决方案,他的Excel文件的连接串写作如下。据说可以强制数据为字符串,具体我没有再测试。仅供参考。
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sPath + ";Extended Properties='Excel 8.0;HDR=YES;IMEX=1'";
其中红色的部分比较值得注意,HDR和IMEX一定要配合使用,HDR表示要把第一行作为数据还是作为列名,作为数据用hdr=no,作为列名用hdr=yes;通过Imex=1来把混合型作为文本型读取,避免null值。SSIS中的Excel Connection和其他的Connection不一样,用户不需要指定数据类型,Excel的driver可以先去做一个采样,然后根据结果去猜一下数据类型。
1public static void DataSetToExcel(DataSet p_dsExport,string p_strFileName,bool p_blnHaveHeaderText)
2 {
3 if (p_dsExport == null)
4 {
5 return ;
6 }
7 string strContext=GenerateWorkSheet(p_dsExport);
8
9 DownloadExcelFile(strContext,p_strFileName);
10
11 }
12
13public static string GenerateWorkSheet(DataSet p_dsExport)
14 {
15 System.Text.StringBuilder strExcelXml=new System.Text.StringBuilder ();
16 strExcelXml.Append(ExcelHeader());
17 strExcelXml.Append(ExcelWorkSheetOptions());
18
19
20 foreach(DataTable dt in p_dsExport.Tables)
21 {
22 // Create First Worksheet tag
23 strExcelXml.Append("<Worksheet ss:Name=\""+ dt.TableName +"\">");
24 // Then Table Tag
25 strExcelXml.Append("<Table>");
26 strExcelXml.Append(GetHeaderText(dt));
27 int intColCount=dt.Columns.Count;
28 foreach(DataRow dr in dt.Rows)
29 {
30 // Row Tag
31 strExcelXml.Append("<Row>\r\n");
32 for(int j=0;j<intColCount;j++)
33 {
34 // Cell Tags
35 strExcelXml.Append("<Cell ss:Index=\""+(j+1).ToString()+"\"><Data ss:Type=\"String\">");
36 strExcelXml.Append(System.Web.HttpUtility.HtmlEncode( ObjectToNullStr(dr[j])));
37 strExcelXml.Append("</Data></Cell>\r\n");
38 }
39 strExcelXml.Append("</Row>\r\n");
40
41 }
42 strExcelXml.Append("</Table>");
43 strExcelXml.Append("</Worksheet>");
44 }
45 strExcelXml.Append("</Workbook>\r\n");
46 return strExcelXml.ToString();
47 }
48
49private static void DownloadExcelFile(string p_strFileContext,string p_strFileName)
50 {
51 // Appending Headers
52 if (IsNullString(p_strFileName))
53 {
54 p_strFileName="Excel.xls";
55 }
56
57 if (!p_strFileName.Trim().ToLower().EndsWith(".xls"))
58 {
59 p_strFileName += ".xls";
60 }
61
62 try
63 {
64 HttpContext.Current.Response.Clear();
65 HttpContext.Current.Response.Buffer= true;
66 p_strFileName = UrlEncode(p_strFileName);
67 HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
68 HttpContext.Current.Response.AppendHeader("content-disposition", "attachment; filename=" + p_strFileName);
69 }
70 catch
71 {
72 }
73
74
75 //Writeout the Content
76 HttpContext.Current.Response.Write(p_strFileContext);
77 try
78 {
79 HttpContext.Current.Response.End();
80 }
81 catch
82 {
83 }
84
85 }