導入Excel至數據庫中 "外部表不是預期格式"錯誤信息

 導入Excel到數據庫時出現“外部表不是預期格式”的錯誤信息,針對這個問題開始很糾結,如果導入的Excel是新建的就不會出現該問題,如果是在導出數據的基礎上進行導入,將會出現這樣的錯誤提示,也許很多朋友會問這是爲什麼呢?

  因爲你的Excel是從程序中導出的並且是使用 Response的方式直接把html代碼輸出到Excel中的 ,其實這是可以解決的,導出的時候使用Excel操作Api來導出就是標準格式,第二種方法在導入的時候啓動Excel.exe進程,這樣將會有一個新的Excel.

  下面我貼出第二種方法的代碼:

1 #region ====Import Vendor按鈕=====
2         [AjaxMethod]
3         public void UploadVendorData_Click(object sender, AjaxEventArgs e)
4         {
5             // 上傳的文件保存在服務器端的路徑
6            string fullFileName = this.FileUploadFieldSelectVendor.PostedFile.FileName;
7             //驗證文件類型
8              if (this.CheckFileType(fullFileName))
9             {
10                 string serverPath = Server.MapPath("UpLoad/") + fullFileName.Substring(fullFileName.LastIndexOf("//") + 1);
11
12                 // 保存文件到服務器
13                  this.FileUploadFieldSelectVendor.PostedFile.SaveAs(serverPath);
14
15                 // 導入到DataSet
16                  DataSet myDataSet = new DataSet();
17
18                 excel.Application myExcel = new excel.Application();//創建一個Excel對象(同時啓動EXCEL.EXE進程)
19
20                 excel._Workbook workbook = (excel._Workbook)(myExcel.Workbooks.Add(serverPath));//添加新工作簿
21                 excel.Sheets sheets = workbook.Worksheets;
22
23                 //導入數據臨時存入DataSet
24                 if (this.ImportExcelToDataSet1(serverPath, ref myDataSet,sheets))
25                 {
26                     #region =========必須有釋放Excel=======
27                     this.ExcelDispose(myExcel);
28                     #endregion
29
30                     // 校驗數據合法性
31                     if (this.CheckVendorDataSet(myDataSet))
32                     {
33                         //插入臨時表
34                         this.projectResourceLogic.AddVendorResource(myDataSet.Tables[0], Request.QueryString["ProjectID"].ToString(), this.CurrentUserInfo.UserID.ToString());
35
36 FileUploadFieldSelectVendor.Reset();
37
38                         this.BindStoreVenderResourceList(Request.QueryString["ProjectID"].ToString());
39
40                         Ext.Msg.Alert("Tip", this.GetMessage("MSG00117")).Show();
41
42                         this.WindowUploadVendorData.Hide();
43                     }
44                 }
45
46                 // 從服務器刪除文件
47                 System.IO.File.Delete(serverPath);
48             }
49         }
50
51        
52         #endregion

2.  導入數據臨時存入Dataset方法:

View Code
1 #region ====導入數據臨時存入Dataset(在導出的模板中修改再導入)======
2 /// <summary>
3 /// 獲得Excel文件放入dataset
4 /// </summary>
5 /// <param name="filepath"></param>
6 /// <returns></returns>
7 private bool ImportExcelToDataSet1(string filepath,ref DataSet myDataSet, excel.Sheets sheets)
8 {
9 bool success = true;
10 try
11 {
12 for (int i = 0; i < sheets.Count; i++)
13 {
14 excel.Worksheet worksheet = (excel.Worksheet)sheets.get_Item(1);
15 DataTable dt = new DataTable();
16 string cellContent;
17 int iRowCount = worksheet.UsedRange.Rows.Count;
18 int iColCount = worksheet.UsedRange.Columns.Count;
19 excel.Range range;
20 for (int iRow = 1; iRow <= iRowCount; iRow++)
21 {
22 DataRow dr = dt.NewRow();
23
24 for (int iCol = 1; iCol <= iColCount; iCol++)
25 {
26 range = (excel.Range)worksheet.Cells[iRow, iCol];
27
28 cellContent = (range.Value2 == null) ? "" : range.Text.ToString();
29
30 if (iRow == 1)
31 {
32 dt.Columns.Add(cellContent);
33 }
34 else
35 {
36 dr[iCol - 1] = cellContent;
37 }
38 }
39
40 if (iRow != 1)
41 dt.Rows.Add(dr);
42 }
43 myDataSet.Tables.Add(dt);
44 }
45 }
46 catch (Exception ex)
47 {
48 Ext.MessageBox.Alert("Error", "The excel format is wrong.please download from the not filled timesheet page first./n" + ex.Message).Show();
49 success = false;
50 }
51
52 return success;
53 }
54 #endregion

3. 釋放Excel

View Code
1 #region ==========釋放Excel===========
2 /// <summary>
3 /// 關閉Excel進程
4 /// </summary>
5 /// <param name="CurExcel"></param>
6 protected void ExcelDispose(excel.Application CurExcel)
7 {
8 try
9 {
10 if (CurExcel != null)
11 {
12 CurExcel.Workbooks.Close();
13 CurExcel.Quit();
14 System.Runtime.InteropServices.Marshal.ReleaseComObject(CurExcel);
15 CurExcel = null;
16 //銷燬Excel對象
17 GC.Collect();
18
19 }
20 }
21 catch (Exception ex)
22 {
23 Ext.Msg.Alert("Excel disponse error:", ex.ToString()).Show();
24 }
25 }
26 #endregion
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章