public mResult Import(HttpPostedFileBase file, string tabName)
{
mResult ret = new mResult();
ret.Code = "200";
ret.Msg = "操作成功!";
try
{
var strPath = @"~/up/" + DateTime.Now.ToString("yyyyMMdd");
if (!Directory.Exists(strPath))
{
//需要注意的是,需要对这个物理路径有足够的权限,否则会报错
DirectoryInfo di = Directory.CreateDirectory(strPath);
}
var thisFileName = Guid.NewGuid().ToString().Replace("-", "") + "." + file.FileName.Split('.').LastOrDefault();
var thisFilePath = Server.MapPath(strPath) + thisFileName;
file.SaveAs(thisFilePath);
using (var fileStream = System.IO.File.Open(thisFilePath, FileMode.Open))
{
//把xls文件中的数据写入wk中,根据不同的文件格式实例化不同的对象去操作文件
IWorkbook wk;
string filePathChoice = thisFileName.Substring(thisFileName.LastIndexOf('.') + 1);
if (filePathChoice.Equals("xlsx"))
{
wk = new XSSFWorkbook(fileStream);
}
else
{
wk = new HSSFWorkbook(fileStream);
}
var sheet = wk.GetSheetAt(0); //读取当前表数据,直接去第一个Sheet
//判断是否有除去标题行的一行数据
if (sheet.LastRowNum < 1)
{
ret.Msg = "无数据";
}
AssemblyResult assInfo = ah.GetClassInfo("DataCenters.DAL.dll", "DataCenters.DAL." + tabName);
List<object> list = new List<object>();
// 去掉第一行
for (var j = 3; j <= sheet.LastRowNum; j++) //LastRowNum 是当前表的总行数
{
var row = sheet.GetRow(j); //读取当前行数据
var titles = sheet.GetRow(2);//标题列字段
if (row != null)
{
var obj = Activator.CreateInstance(assInfo.ClassType);
for (var k = 0; k <= row.LastCellNum; k++) //LastCellNum 是当前行的总列数
{
var title = titles.GetCell(k).ToString().ToLower().Trim();//对应字段
var cell = row.GetCell(k); //当前表格
var field = assInfo.Properties.Any(w => w.ToLower().Trim() == title) ? assInfo.Properties.FirstOrDefault(w => w.ToLower().Trim() == title) : "";
var fieldType = assInfo.PropertyType[assInfo.Properties.IndexOf(field)];
if (field != "" && cell != null)
{
Debug.WriteLine("field", field);
Debug.WriteLine("fieldType", fieldType);
if (fieldType.ToLower().Contains("decimal"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDecimal(cell.ToString()));
}
else if (fieldType.ToLower().Contains("int16"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt16(cell.ToString()));
}
else if (fieldType.ToLower().Contains("int32"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToInt32(cell.ToString()));
}
else if (fieldType.ToLower().Contains("double"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDouble(cell.ToString()));
}
else if (fieldType.ToLower().Contains("datetime"))
{
obj.GetType().GetProperty(field).SetValue(obj, Convert.ToDateTime(cell.ToString()));
}
else
{
obj.GetType().GetProperty(field).SetValue(obj, cell.ToString());
}
}
}
list.Add(obj);
}
}
ret.Data = list;
}
}
catch (Exception e)
{
ret.Code = "500";
ret.Msg = e.Message;
throw;
}
return ret;
}
public class mResult
{
public string Code { get; set; }
public string Msg { get; set; }
public object Data { get; set; }
}