我在Asp net MVC中使用开放的XML sdk dll将excel上载到我的网站。
我的excel文件中有4列,名称,电子邮件,公司名称和电话号码。
我使用以下代码从我的视图中获取excel文件并将其保存在本地磁盘中,然后访问它的单元格以保存在我的数据库中。
**,但是在调试代码时出现问题。当我想访问包含字符串的单元格时,显示它包含0,但读取数字没有问题。
当我的foreach项进入包含字符串的单元格时,它显示为零。** 有什么主意吗?
编辑的问题: 我通过此代码修改设法读取了单元格的值,但是还有另一个问题。根据This answer,我应该读取共享字符串以读取字符串,但是当我读取DataType时,它在某个随机时刻的值为null。所以我看不懂一些细胞。我找不到问题
这是控制器代码:
[HttpPost]
public IHttpActionResult UploadExcelFile()
{
try
{
var rnd = new Random();
string filePath = "";
var httpRequest = HttpContext.Current.Request;
if (httpRequest.Files.Count < 1)
{
return Content(HttpStatusCode.BadRequest, "there's no file selected");
}
var guid = rnd.Next(999);
var postedFile = httpRequest.Files[0];
var serverFilePath = HttpContext.Current.Server.MapPath("~/Content/Email/" + guid + Path.GetExtension(postedFile.FileName));
filePath = "/Content/Email/" + guid + Path.GetExtension(postedFile.FileName);
postedFile.SaveAs(serverFilePath);
using (SpreadsheetDocument spreadsheetDocument =SpreadsheetDocument.Open(serverFilePath, false))
{
List<string> colName = new List<string>(new string[] { "A", "B", "C","D" });
var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>();
WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
WorksheetPart worksheetPart = workbookPart.WorksheetParts.First();
Worksheet worksheet = worksheetPart.Worksheet;
var rowCount = GetRowCount(worksheet);
for (int i = 0; i < rowCount; i++)
{
Cell cell = GetCell(worksheet, colName[i], i+1);
Row row = GetRow(worksheet, i+1);
foreach (var item in row.ChildElements)
{
List<string> cellValue = new List<string>();
if (cell.DataType != null)
{
if (cell.DataType == CellValues.SharedString)
{
int id = -1;
if (Int32.TryParse(cell.InnerText, out id))
{
SharedStringItem x = GetSharedStringItemById(workbookPart, id);
if (x.Text != null)
{
cellValue.Add(x.Text.Text);
}
else if (item.InnerText != null)
{
cellValue.Add(x.InnerText);
}
else if (item.InnerXml != null)
{
cellValue.Add(x.InnerXml);
}
}
}
}
else
{
cellValue.Add(item.InnerText);
}
}
}
}
return Ok(new { message = "Record has been saved successfully" });
}
catch (Exception e)
{
return Content(HttpStatusCode.BadRequest, "there's problem with Server");
throw;
}
}
答案 0 :(得分:-2)
var connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=E:\\mybook.xlsx;Extended Properties=\"Excel 12.0 Xml;HDR=NO;IMEX=1;\"";
var OledbConn = new OleDbConnection(connString);
DataTable schemaTable = new DataTable();
var OledbCmd = new OleDbCommand();
OledbCmd.Connection = OledbConn;
OledbConn.Open();
OledbCmd.CommandText = "Select * from [StudentDetails$]";
OleDbDataReader dr = OledbCmd.ExecuteReader();
DataTable ContentTable = null;
if (dr.HasRows)
{
ContentTable = new DataTable();
ContentTable.Columns.Add("Name", typeof(string));
ContentTable.Columns.Add("Email", typeof(string));
ContentTable.Columns.Add("Company Name", typeof(string));
ContentTable.Columns.Add("Phone Number", typeof(string));
while (dr.Read())
{
if (dr[0].ToString().Trim() != string.Empty && dr[1].ToString().Trim() != string.Empty && dr[2].ToString().Trim() != string.Empty && dr[0].ToString().Trim() != " " && dr[1].ToString().Trim() != " " && dr[2].ToString().Trim() != " ")
ContentTable.Rows.Add(dr[0].ToString().Trim(), dr[1].ToString().Trim(), dr[2].ToString().Trim(), dr[3].ToString().Trim());
}
}
dr.Close();
}