gpt4 book ai didi

sql-server - 使用 Azure 应用服务从 Excel 文件读取数据的推荐方法?

转载 作者:行者123 更新时间:2023-12-02 11:03:53 24 4
gpt4 key购买 nike

背景
我有一个旧网站,允许授权用户上传产品数据等的 Excel 电子表格。然后该网站读取 Excel 工作表并将数据解压到 SQL Server 中。这是一个旧站点并且使用 OLE。老旧但有效。

问题
我最近将该网站发布到 Azure 应用服务,但从 Excel 读取的现有代码部分不起作用(因为 Azure 没有正确的驱动程序)。

问题
我很高兴重写这部分代码,但是使用 Azure 应用服务从 Excel 读取数据的正确或推荐方法是什么?我并不是在问可能有效的方法,我只是对正确的方法感兴趣。

我所说的“推荐”是指:

  • 没有不必要的复杂。保持简单。
  • future 可能会保留 Microsoft 的支持

我已经研究过这个问题,但无法找到最佳方法的明确声明。如果您对执行此操作的不同方法有经验或了解,如果您能分享您关于执行此操作的最佳方法的结论,我将不胜感激。

最佳答案

应该有很多方法可以实现这一目标,这里我列出了以下 2 种:

1.使用DocumentFormat.OpenXml ,这是MS发布的,但是有点复杂。演示代码为here .

2.使用ExcelDataReader ,非常简单,并且支持 .xls 和 .xlsx。可以引用这个article执行此操作(请注意,IsFirstRowAsColumnNames 属性已被放弃,您可以在下面查看我的代码以了解此更改)。

我用第二种方法ExcelDataReader编写了一个演示。出于测试目的,我将 Excel 上传到 azure Web 应用程序目录,如下所示:

下面是excel内容:

第1步:创建一个asp.net MVC项目,然后通过nuget包管理器安装最新版本的ExcelDataReaderExcelDataReader.DataSet

第2步:在项目中创建一个ExcelData.cs文件,用于读取Excel文件:

第3步:在ExcelData.cs中编写以下代码:

using ExcelDataReader;
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;

namespace WebApplication42
{
public class ExcelData
{
string _path;
public ExcelData(string path)
{
_path = path;
}

public IExcelDataReader GetExcelReader()
{
FileStream stream = File.Open(_path, FileMode.Open, FileAccess.Read);
IExcelDataReader reader = null;
try
{
if (_path.EndsWith(".xls"))
{
reader = ExcelReaderFactory.CreateBinaryReader(stream);
}
if (_path.EndsWith(".xlsx"))
{
reader = ExcelReaderFactory.CreateOpenXmlReader(stream);
}

return reader;
}
catch (Exception)
{
throw;
}
}

//read the sheets name if you need
public IEnumerable<string> GetWorksheetNames()
{
var reader = this.GetExcelReader();
var workbook = reader.AsDataSet();
var sheets = from DataTable sheet in workbook.Tables select sheet.TableName;
return sheets;
}

//read data in a specified sheet
public IEnumerable<DataRow> GetData(string sheet)
{

var reader = this.GetExcelReader();
var workSheet = reader.AsDataSet(new ExcelDataSetConfiguration()
{
ConfigureDataTable = (_) => new ExcelDataTableConfiguration()
{
//indicates if use the header values
UseHeaderRow = true
}

}).Tables[sheet];

var rows = from DataRow a in workSheet.Rows select a;
return rows;
}

}
}

第四步:在 Controller 中,调用读取excel方法:

        public ActionResult Excels()
{
ViewBag.Message = "the data from excel:";
string data = "";

//your excel path after uploaded, here I hardcoded it for test only
string path = @"D:\home\site\wwwroot\Files\ddd.xls";
var excelData = new ExcelData(path);
var people = excelData.GetData("sheet1");

foreach (var p in people)
{
for (int i=0;i<=p.ItemArray.GetUpperBound(0);i++)
{
data += p[i].ToString()+",";
}

data += ";";
}

ViewBag.Message += data;

return View();
}

第5步:发布到azure后,启动网站并查看结果->读取excel中的所有数据:

关于sql-server - 使用 Azure 应用服务从 Excel 文件读取数据的推荐方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53189639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com