Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何上传excel文件并向数据库中添加列?_C#_Excel_Asp.net Mvc - Fatal编程技术网

C# 如何上传excel文件并向数据库中添加列?

C# 如何上传excel文件并向数据库中添加列?,c#,excel,asp.net-mvc,C#,Excel,Asp.net Mvc,我在Asp net MVC中使用OpenXMLSDK dll将excel上载到我的网站 我的excel文件名、电子邮件、公司名称和电话号码中有4列 我使用以下代码从视图中获取excel文件并将其保存在本地磁盘中,然后访问其单元格以保存在数据库中 **但调试代码时存在问题。当我想访问包含字符串的单元格时,它会向我显示它包含0,但读取数字没有问题 当我的foreach项出现在包含字符串的单元格上时,它显示为零** 有什么想法吗 编辑问题: 通过修改代码,我成功地读取了单元格的值,但还有另一个问题。根

我在Asp net MVC中使用OpenXMLSDK dll将excel上载到我的网站

我的excel文件名、电子邮件、公司名称和电话号码中有4列

我使用以下代码从视图中获取excel文件并将其保存在本地磁盘中,然后访问其单元格以保存在数据库中

**但调试代码时存在问题。当我想访问包含字符串的单元格时,它会向我显示它包含0,但读取数字没有问题

当我的foreach项出现在包含字符串的单元格上时,它显示为零** 有什么想法吗

编辑问题: 通过修改代码,我成功地读取了单元格的值,但还有另一个问题。根据本文,我应该读取共享字符串来读取字符串,但当我读取数据类型时,它在某个随机时刻的值为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;
        }
    }
[HttpPost]
公共IHttpActionResult UploadExcelFile()
{
尝试
{
var rnd=新随机数();
字符串filePath=“”;
var httpRequest=HttpContext.Current.Request;
if(httpRequest.Files.Count<1)
{
返回内容(HttpStatusCode.BadRequest,“未选择任何文件”);
}
变量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);
SaveAs(serverFilePath);
使用(SpreadsheetDocument SpreadsheetDocument=SpreadsheetDocument.Open(serverFilePath,false))
{
List colName=新列表(新字符串[]{“A”、“B”、“C”、“D”});
var sheets=spreadsheetDocument.WorkbookPart.Workbook.substanders();
WorkbookPart WorkbookPart=电子表格文档.WorkbookPart;
WorksheetPart WorksheetPart=workbookPart.WorksheetParts.First();
工作表=工作表零件工作表;
var rowCount=GetRowCount(工作表);
对于(int i=0;i
所有的行都将进入ContentTable(DataTable),现在你可以做任何你想做的事情。只有编码的答案不是好的答案,除非发生了什么显而易见的事情。在这种情况下,使用JET驱动程序而不是本机库的建议实际上会让事情变得更糟。它不能回答OP的问题,更糟糕的是,使用本地区域性将Excel值转换为带有
ToString()
的字符串会导致转换错误,尤其是对于数字和日期。对于字符串来说,这简直是浪费,值在这段代码中已经是字符串了。事实上,没有修改。如果一个单元格包含日期,会发生什么情况?日期是二进制值,而不是带分隔符的字符串。该代码在美国会产生什么?这与美国或法国有何不同?带小数的数字也一样。在美国、美国、法国或印度的某个数字上调用
ToString()
后,您会得到不同的字符串我该怎么办?您可以elobrate@panagiotiskanavo使用哪个库?您正在使用OpenXMLSDK吗?艾普拉斯?ClosedXML?NPOI?在任何情况下,在Excel中
。Text
都会为您提供一个格式化字符串
.Value
将为您提供实际值。如果是数字,
.Text
将返回格式化字符串,
.Value
将返回存储在单元格中的int或fload。@PanagiotisKanavos我使用microsoftI提供的Open XML SDK,我假设它是2.7.1+,因为
CellValue
在以前的版本中不可用。办理登机手续。您应该使用
Cell.DataType.Value
或尝试在共享字符串表中查找字符串打开的XML格式允许保存共享字符串表中多个位置使用的字符串。使用此值的单元格包含该表的索引,而不是实际字符串<代码>单元值指spe
        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();
    }