Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/339.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#_Sql_Excel - Fatal编程技术网

C# 如何从文件输入中读取excel文件而不将文件保存到服务器

C# 如何从文件输入中读取excel文件而不将文件保存到服务器,c#,sql,excel,C#,Sql,Excel,我收到一个由客户端上传到服务器的Excel文件,我正在查看的所有示例都显示了如何保存它,然后再读取它 我需要做的是从网页和/或文件阅读器接收excel文件,并将其保存到数据表中,其中列名称保留在excel工作表的第一行 下面的代码正是我所需要的,但它没有显示如何在不先将文件保存到存储器的情况下将文件读入数据表 我需要保存excel文件并对其进行处理,以确保所有列名都正确,并且每行中的数据都正确。处理完这些信息后,我将开始将其保存到sql数据库的过程 如何将Excel文件作为流保存到datatab

我收到一个由客户端上传到服务器的Excel文件,我正在查看的所有示例都显示了如何保存它,然后再读取它

我需要做的是从网页和/或文件阅读器接收excel文件,并将其保存到数据表中,其中列名称保留在excel工作表的第一行

下面的代码正是我所需要的,但它没有显示如何在不先将文件保存到存储器的情况下将文件读入数据表

我需要保存excel文件并对其进行处理,以确保所有列名都正确,并且每行中的数据都正确。处理完这些信息后,我将开始将其保存到sql数据库的过程

如何将Excel文件作为流保存到datatable中,同时保留列名

**注意表名并不重要,我只处理Excel手册的第一页,每行中的列名和数据类型才是最重要的

代码引用自:

您可以使用以下方法执行此操作:

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        DataTable dataTable = new DataTable();
        using (MemoryStream mStream = new MemoryStream(fileContents))
        {
            using (var excelPackage = new ExcelPackage(mStream))
            {
                ExcelWorksheet firstSheet = excelPackage.Workbook.Worksheets.First();
                var endAddress = firstSheet.Dimension.End;
                dataTable.TableName = firstSheet.Name;
                ExcelRange headerRange = firstSheet.Cells[1, 1, 1,endAddress.Column ];

                //Add columns using headers
                foreach (var cell in headerRange)
                {
                    dataTable.Columns.Add(cell.Value.ToString()); //You can hardcode whatever type you need to here
                }

                //Add Data:
                for (int rowIdx = 2; rowIdx <= endAddress.Row; rowIdx++)
                {
                    DataRow dataRow = dataTable.NewRow();
                    for (int colIdx = 1; colIdx <= endAddress.Column; colIdx++)
                    {
                        dataRow[colIdx - 1] = firstSheet.Cells[rowIdx, colIdx].Value;
                    }
                    dataTable.Rows.Add(dataRow);
                }
            }
        }
        //Now Do whatever you want with your DataTable:
        GridView1.DataSource = dataTable;
        GridView1.DataBind();
    }
}
如果您事先不知道列的类型,并且仍然需要强类型表,那么我想您可以使用单元格的
Style.Numberformat
属性来确定传递给列构造函数的
类型

protected void btnUpload_Click(object sender, EventArgs e)
{
    if (FileUpload1.HasFile)
    {
        DataTable dataTable = new DataTable();
        using (MemoryStream mStream = new MemoryStream(fileContents))
        {
            using (var excelPackage = new ExcelPackage(mStream))
            {
                ExcelWorksheet firstSheet = excelPackage.Workbook.Worksheets.First();
                var endAddress = firstSheet.Dimension.End;
                dataTable.TableName = firstSheet.Name;
                ExcelRange headerRange = firstSheet.Cells[1, 1, 1,endAddress.Column ];

                //Add columns using headers
                foreach (var cell in headerRange)
                {
                    dataTable.Columns.Add(cell.Value.ToString()); //You can hardcode whatever type you need to here
                }

                //Add Data:
                for (int rowIdx = 2; rowIdx <= endAddress.Row; rowIdx++)
                {
                    DataRow dataRow = dataTable.NewRow();
                    for (int colIdx = 1; colIdx <= endAddress.Column; colIdx++)
                    {
                        dataRow[colIdx - 1] = firstSheet.Cells[rowIdx, colIdx].Value;
                    }
                    dataTable.Rows.Add(dataRow);
                }
            }
        }
        //Now Do whatever you want with your DataTable:
        GridView1.DataSource = dataTable;
        GridView1.DataBind();
    }
}
dataTable.Columns.Add(cell.Value.ToString(),typeof(int));