匯入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到匯入MYSQL資料庫ExcelMySql資料庫
- pl/sql developer將excel資料匯入到資料庫中SQLDeveloperExcel資料庫
- excel 匯入sqlyog資料庫ExcelSQL資料庫
- TP5.1excel匯入資料庫的程式碼?php excel如何匯入資料庫?Excel資料庫PHP
- 將excel表格匯入資料庫Excel資料庫
- 把Excel表資料匯入到mysqlExcelMySql
- java 實現excel中的資料匯入到資料庫的功能JavaExcel資料庫
- asp.net 操作Excel表資料匯入到SQL Server資料庫ASP.NETExcelSQLServer資料庫
- SpringBoot+Mybatis-plus整合easyExcel批次匯入Excel到資料庫+匯出ExcelSpring BootMyBatisExcel資料庫
- Excel匯入Sqlserver資料庫指令碼ExcelSQLServer資料庫指令碼
- 如何用Java將excel資料匯入資料庫JavaExcel資料庫
- java怎麼將excel表格資料匯入資料庫JavaExcel資料庫
- Excel 表匯入資料Excel
- Oracle 資料匯入ExcelOracleExcel
- Sql Server資料庫資料匯入到SQLite資料庫中Server資料庫SQLite
- Excel的資料匯入到PB的DW中Excel
- Oracle 巧用外部表將大量excel資料匯入資料庫OracleExcel資料庫
- 將excel中資料從window上匯入到linux中oracle資料庫ExcelLinuxOracle資料庫
- NCF 如何匯入Excel資料Excel
- 匯入excel 資料時間Excel
- EasyPoi, Excel資料的匯入匯出Excel
- 資料庫 MySQL 資料匯入匯出資料庫MySql
- Oracle匯入excel資料快速方法OracleExcel
- Oracle資料匯入到Hive資料庫的操作方法OracleHive資料庫
- 第一章 Excel資料分析入門 --(2)Excel匯入資料Excel
- 大文字資料,匯入匯出到資料庫資料庫
- IIS 日誌匯入到資料庫的方法資料庫
- 遠端資料庫AWR 匯入到本地分析資料庫
- SQL SERVER 和EXCEL的資料匯入匯出SQLServerExcel
- excel檔案中的資料匯入Oracle資料庫的幾種方法ExcelOracle資料庫
- 把csv檔案的資料匯入到oracle資料庫中Oracle資料庫
- 資料庫的匯入匯出資料庫
- mysql 資料庫匯入匯出MySql資料庫
- MySQL資料庫匯入匯出MySql資料庫
- 使用Oracle SQL Developer匯入Excel資料OracleSQLDeveloperExcel
- 用SQL語句匯入excel資料SQLExcel
- JS之實現Excel資料匯入JSExcel