Excel數據導入___你hold住麽(一)
近期小編跟著團隊一起開發ITOO3.0高校雲平臺項目,當中的收獲是不言而喻滴,在項目中有個導入功能:導入學生信息;導入班級信息:導入教學樓信息等,在不知多少次的嘗試之下,成功實現功能。
框架分析
詳解一下
-第一步:在MVC框架的Client端新建目錄
- 第二步:通過NPOI文件流(詳細的專業名稱不知道是叫啥。姑且稱文件流)將保存在Client的Excel文件流傳到WCF框架的Server端
- 第三步:在Server端中,新建目錄保存Excel模板的xml文件
Server端中的XML文件起到解析的作用,從而將Excel 中的數據插入Insert到數據表中
代碼設計
上傳Excel到Server
* Controller
private readonly IUploadFile upLoadService1 = ServiceFactory.GetUploadFileService();
#region ImportFlowBatch()+批量導入流程-徐露-2015年7月8日10:39:02
///
/// 批量導入流程
///
///
public ActionResult ImportFlowBatch()
{
#region 文件驗證以及上傳到指定目錄 Client端
HttpPostedFileBase file = Request.Files[“files”];
string strFileName;
string strSavePath;
string ClientPath = AppDomain.CurrentDomain.BaseDirectory + “File\UpFile\”;
string strPaperId = “1”;
//這個是Client端的文件保存路徑
if (file == null || file.ContentLength <= 0) { ViewBag.error = "文件不能為空"; return View(); } else { string strFilename = Path.GetFileName(file.FileName); int intFilesize = file.ContentLength;//獲取上傳文件的大小單位為字節byte string fileEx = System.IO.Path.GetExtension(strFilename);//獲取上傳文件的擴展名 string strNoFileName = System.IO.Path.GetFileNameWithoutExtension(strFilename);//獲取無擴展名的文件名稱 int Maxsize = 4000 * 1024;//定義上傳文件的最大空間大小為4M string FileType = ".xls,.xlsx";//定義上傳文件的類型字符串 strFileName = strNoFileName + DateTime.Now.ToString("yyyyMMddhhmmss") + fileEx; if (!FileType.Contains(fileEx)) { ViewBag.error = "文件類型不正確。僅僅能導入xls和xlsx格式的文件"; //return View(); } if (intFilesize >= Maxsize) { ViewBag.error = "上傳文件超過4M。不能上傳"; //return View(); } strSavePath = Path.Combine(ClientPath, strFileName); file.SaveAs(strSavePath); } #endregion #region 將Client端上傳的文件 上傳到Server端 FileUploadMessage myFileMessage = new FileUploadMessage(); string strDataFileName = file.FileName; myFileMessage.FileName = strDataFileName;//文件名稱 string CientPathName = ClientPath + strFileName; using (FileStream fs = System.IO.File.OpenRead(CientPathName)) { myFileMessage.FileData = fs; try { upLoadService1.UploadFileMethod(myFileMessage); } catch { } //關閉流 fs.Close(); } #endregion string[] HeadName = { "流程ID", "流程名稱", "優先級", "是否啟用(啟用1。未啟用0)", "流程Url", "時間戳", "是否刪除" }; //調用執行 寫數據庫 if(upLoadService1.ServiceReadFile (strDataFileName ,strPaperId )==null) { return RedirectToAction("Index","ImportStudent"); } else { DataTable table = upLoadService1 .ServiceReadFile (strDataFileName ,strPaperId )[0]; return File (Export .ExportManager .ExportExcel (table,HeadName ),"application/vnd.ms-excel", "流程導入錯誤列表" + ".xls"); } } #endregion
*在Service中讀取Excel文件,寫入數據庫
須要加的三個:IUploadFile(接口)、UploadFile(實現類)、以及ServiceFactory(工廠)
篇幅限制,詳細代碼不再粘貼。小編會詳細上傳Demo,另行下載
*XML配置
針對每個導入的Excel都須要一個對應的XML配置文件,以便底層方法可以解析獲取
XML應統一放置在某一路徑下,詳細路徑配置例如以下:
<appConfig>下加入節點
<add key="ExcelImportXMLPath" value="Models/ImportConfigXML"/>
即將配置文件存放路徑放在了Service層的Models/ImportConfigXML目錄下。
命名:各系統可依據詳細情況詳細命名,調用方法時須要傳入XML文件名稱稱
詳細XML配置可參考:
<?xml version="1.0" encoding="utf-8" ?>
<Excel name="導入流程模板">
<Sheet name="流程" table="FreshFlowEntity" primaryKey="FlowID" pkType="guid">
<Column name="流程名稱" field="Name">
<DataType>string</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="優先級" field="Sort" isNecessary="true">
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="是否啟用(啟用1,未啟用0)" field="IsUse" isVerifyRepeat="false" >
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="流程Url" field="Url" isVerifyRepeat="false">
<DataType>string</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="時間戳" field="TimeSpan" isNecessary="false" isVerifyRepeat="false" >
<DataType>DateTime</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
<Column name="是否刪除" field="IsDelete" isVerifyRepeat="false">
<DataType>int</DataType>
<ForeignKey isExist="false"></ForeignKey>
</Column>
</Sheet>
</Excel>
以上就是做導入的基本流程,那是不是完善敲出代碼就能正常執行呢,請見小編下文分析 link text
Excel數據導入___你hold住麽(一)