视图中的代码:
<div class="gcs-login-panel" style="height: 200px;">
<div class="gcs-login-container">
<input id="file" type="file" placeholder="请输入用户名" class="input" accept=".xlsx,.xls" />
</div>
<div class="gcs-login-container">
<span style="color:red">请选择扩展名为xlsx或者xls的文件</span>
</div>
<div class="gcs-login-container">
<input id="submit" name="submit" type="button" value="开始上传" class="btn-login" />
</div>
</div>
Js中的代码:
$("#submit").on("click", function () {
if ($("#file").val() == "" || $("#file").val() == null) {
alert("请选择文件");
return;
}
var formData = new FormData();
var file = $("#file")[0].files[0];
formData.append("files", file);
$("#submit").val("正在转换...");
//上传文件
$.ajax({
url: '/home/getDataFromExcel',
type: "post",
processData: false,
contentType: false,
data: formData,
async: false,
success: function (res) {
res = JSON.parse(res);
if (res.status == 0) {
alert("获取数据成功");
$("#submit").val("上传文件");
window.location.href = "#";
}
else {
alert("获取数据失败");
}
}
});
})
Controller中的代码:
/// <summary>
/// 从Excel获取数据
/// </summary>
/// <param name="form"></param>
/// <returns></returns>
public string GetDataFromExcel([FromForm]IFormCollection form)
{
try
{
IFormFileCollection files = form.Files;
using (MemoryStream memoryStream = new MemoryStream())
{
files[0].CopyToAsync(memoryStream);
Workbook workBook = new Workbook(memoryStream);
Cells cells = workBook.Worksheets[0].Cells;
int maxDataRow = cells.MaxDataRow;
int maxDataColumn = cells.MaxDataColumn;
List<string> list = new List<string>();
for (int i = 0; i <= maxDataColumn; i++)
{
list.Add(cells[0, i].StringValue.Trim());
}
var data = "Data=[";
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= maxDataRow; i++)
{
sb.Append("{");
for (int j = 1; j <= maxDataColumn; j++)
{
if (j != maxDataColumn)
{
sb.Append(list[j] + ":\"" + cells[i, j].StringValue.Trim() + "\",");
}
else
{
sb.Append(list[j] + ":\"" + cells[i, j].StringValue.Trim()+"\"");
}
}
if (i != maxDataRow)
{
sb.Append("},\r\n");
}
else
{
sb.Append("}\r\n");
}
}
data += sb.ToString()+"]";
FileInfo fileInfo = new FileInfo(_webHostEnvironment.WebRootPath + "\\static\\data\\data.js");
if (fileInfo.Exists)
{
fileInfo.Delete();
}
fileInfo.Create().Close();
string strFileName = Path.Combine(_webHostEnvironment.WebRootPath, "static\\data", "data.js");
using (FileStream fs = new FileStream(strFileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite))
{
using (StreamWriter sw = new StreamWriter(fs))
{
sw.Write(data);
}
}
}
}
catch (Exception ex)
{
return Newtonsoft.Json.JsonConvert.SerializeObject(new { status = 1,data=ex.Message });
}
return Newtonsoft.Json.JsonConvert.SerializeObject(new { status = 0,data="生成数据成功" });
}