匯入excel資源到資料庫
本質: excel資源-》資料庫
場景: 使用者上傳個excel 想把這裡面資料 存資料庫
流程:1 校驗資料 2.將可用資料進行儲存
如圖客戶要上傳的excel相關資訊
C# 程式碼
1.獲取
[HttpPost]
public HttpResponseMessage ImportActivityCheck()
{
Response<object> response = new Response<object>();
var file = HttpContext.Current.Request.Files[0]; //獲取選中檔案
if (file != null && file.ContentLength > 0)
{
//2 轉DataSet
var ds = ExcelHelper.ExcelToDataSet(file.InputStream);
//3驗證資料有效性
var result = BasicLevelService.ImportActivityCheck(ds.Tables[0]);
//4 返回有效結果進行預覽如果沒有客戶預覽 就直接儲存即可
response.Result = result;
}
return JsonHelper.Instance.HttpResponse(response);
}
2. Excel轉DataSet /datatable
/// <summary>
/// NPOI Excel轉DataSet
/// </summary>
/// <param name="excelServerPath"></param>
/// <param name="hasTitle">是否有標題</param>
/// <param name="isRemoveEmptyRow">是否移除空行</param>
/// <returns></returns>
public static DataSet ExcelToDataSet(Stream stream, bool hasTitle = true)
{
IWorkbook workBook = WorkbookFactory.Create(stream, ImportOption.All);
DataSet ds = new DataSet();
for (int i = 0; i < workBook.NumberOfSheets; i++)
{
ISheet sheet = workBook.GetSheetAt(i);
DataTable dt = null;
if (hasTitle)
{
dt = SheetToDataTableHasTitle(sheet);
}
else
{
dt = SheetToDataTable(sheet);
}
ds.Tables.Add(dt);
}
return RemoveEmptyRow(ds);
}
3:進行資料檢驗 大多數情況 會預覽讓客戶知道 如圖 匹配情況
所以我們將匹配的集合返回 然後把不匹配的數量也返回
/// <summary>
/// 活動匯入資料驗證
/// </summary>
/// <param name="dt"></param>
/// <returns></returns>
public List<ImportActivityCheckDto> ImportActivityCheck(DataTable dt)
{
if (dt.Rows.Count == 0) throw new Exception("無匯入資料");
var result = new List<ImportActivityCheckDto>();
var idCardArr = new ArrayList();
foreach (DataRow row in dt.Rows)
{
try
{
var entity = new ImportActivityCheckDto()
{
IdCard = row["身份證號"].ToString(),
Name = row["姓名"].ToString(),
Title = row["活動名稱"].ToString(),
TypeText = row["活動型別"].ToString(),
StartDate = DateTime.FromOADate(double.Parse(row["活動參與時間"].ToString()))
};
idCardArr.Add(entity.IdCard);
result.Add(entity);
}
catch (Exception e)
{
var entity = new ImportActivityCheckDto()
{
IdCard = row["身份證號"].ToString(),
Name = row["姓名"].ToString(),
Title = row["活動名稱"].ToString(),
TypeText = row["活動型別"].ToString(),
StartDate = null
};
idCardArr.Add(entity.IdCard);
result.Add(entity);
}
}
string sql = $"select Id,IdCard,LastRestTime from MHBasicLevelCadre where IdCard in ('{string.Join("','", idCardArr.ToArray())}')";
var levelCadres = this.MHBasicLevelCadreApp.Repository.SqlQuery<ActivityCheckDto>(sql).ToList();
var activityList = Enumeration.GetAll<ActivityEnum>().ToList();
foreach (var item in result)
{
var entity = levelCadres.FirstOrDefault(c => c.IdCard == item.IdCard);
//找不到人
if (entity == null)
{
item.MateResult = ActivityMateResultEnum.找不到人.Code;
item.ErrorMsg = "檔案無法匹配";
continue;
}
var typeEntity = activityList.FirstOrDefault(c => c.Name == item.TypeText);
//型別不匹配
if (typeEntity == null)
{
item.MateResult = ActivityMateResultEnum.型別無法匹配.Code;
item.ErrorMsg = "活動型別無法匹配";
continue;
}
item.Type = typeEntity.Code;
var count = result.Count(c => c.Type == item.Type && c.IdCard == item.IdCard && c.StartDate == item.StartDate);
//時間衝突
if (count > 1||item.StartDate==null)
{
item.MateResult = ActivityMateResultEnum.資料重複.Code;
item.ErrorMsg = "時間衝突";
continue;
}
item.CadreId = entity.Id;
item.MateResult = ActivityMateResultEnum.成功.Code;
}
return result;
}
4:預覽過後 客戶可能會修改資料 或者 執意要儲存
但是這時候儲存的資料就是前端把資料給到後端來了,所以只是將資料儲存操作即可
如果沒有客戶預覽的過程 那就 直接在第3步驟 直接儲存那些有效的即可 不用傳給前端預覽 也就不會有第4步驟 在傳回來儲存的操作了
相關文章
- java 從EXCEL匯入到資料庫JavaExcel資料庫
- excel 匯入sqlyog資料庫ExcelSQL資料庫
- TP5.1excel匯入資料庫的程式碼?php excel如何匯入資料庫?Excel資料庫PHP
- SpringBoot+Mybatis-plus整合easyExcel批次匯入Excel到資料庫+匯出ExcelSpring BootMyBatisExcel資料庫
- Oracle 資料匯入ExcelOracleExcel
- Excel 表匯入資料Excel
- EasyPoi, Excel資料的匯入匯出Excel
- 匯入excel 資料時間Excel
- NCF 如何匯入Excel資料Excel
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- 大文字資料,匯入匯出到資料庫資料庫
- 第一章 Excel資料分析入門 --(2)Excel匯入資料Excel
- 將資料庫中資料匯出為excel表格資料庫Excel
- Python使用pymysql和xlrd2將Excel資料匯入MySQL資料庫PythonMySqlExcel資料庫
- IIS 日誌匯入到資料庫的方法資料庫
- JS之實現Excel資料匯入JSExcel
- 使用Oracle SQL Developer匯入Excel資料OracleSQLDeveloperExcel
- 如何將 EXCEL 資料寫入資料庫Excel資料庫
- 小程式批次匯入excel資料,雲開發資料庫匯出cvs亂碼解決方案Excel資料庫
- python將目標檢測資料匯入到指定資料庫中Python資料庫
- GeoRapter工具將shapefile資料匯入到Oracle空間資料庫中APTOracle資料庫
- Mysql 資料庫匯入與匯出MySql資料庫
- .NET Core使用NPOI將Excel中的資料批量匯入到MySQLExcelMySql
- 第四節:海量資料匯出到Excel、百萬Excel匯入到DB、秒級/分鐘級排行版Excel
- Access 匯入 oracle 資料庫Oracle資料庫
- Flume:資料匯入到hdfs中
- 將資料庫中資料匯入至solr索引庫資料庫Solr索引
- 使用navicat匯出查詢大量資料結果集並匯入到其他資料庫(mysql)資料庫MySql
- 如何將Excl內資料匯入資料庫?資料庫
- SQL資料庫的匯入和匯出SQL資料庫
- java 匯入到EXCEL表格JavaExcel
- 將資料匯出到ExcelExcel
- HHDBCS資料庫一鍵匯入資料庫
- php讀取excel檔案資料的匯入和匯出PHPExcel
- Python 利用pandas和mysql-connector獲取Excel資料寫入到MySQL資料庫PythonMySqlExcel資料庫
- 100萬資料,如何快速的匯入資料庫?資料庫
- 如何將外部資料庫 匯入到系統的SQL中資料庫SQL
- 資料庫文件編寫,如何通過Navicat把表導成表格?資料庫快速匯出為excel表格資訊,excel匯出到word表格資料庫Excel