1. 程式人生 > >Excel數據導入___你hold住麽(一)

Excel數據導入___你hold住麽(一)

excel表格 雲平臺 配置 關閉流 ads div size parent 解析

近期小編跟著團隊一起開發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住麽(一)