Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/43.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# 通过web浏览器打开.xls/.xlsx文件,并使其可供用户编辑_C#_Asp.net_Excel_Web_Oledb - Fatal编程技术网

C# 通过web浏览器打开.xls/.xlsx文件,并使其可供用户编辑

C# 通过web浏览器打开.xls/.xlsx文件,并使其可供用户编辑,c#,asp.net,excel,web,oledb,C#,Asp.net,Excel,Web,Oledb,规范 使用.NET3.5/4.0框架 Web应用程序C# 计算机没有安装MS Office 问题: 需要从web浏览器打开excel文件报表,以便用户编辑报表并将更新保存到excel文件中。(可能吗?因为机器没有安装MS office) 按代码:我只能读取文件并通过网格显示,但无法编辑 public void LoadExceltotheGrid() { string connectionString = ""; string fileLocation = MapPath("

规范

  • 使用.NET3.5/4.0框架
  • Web应用程序C#
  • 计算机没有安装MS Office
问题: 需要从web浏览器打开excel文件报表,以便用户编辑报表并将更新保存到excel文件中。(可能吗?因为机器没有安装MS office)

按代码:我只能读取文件并通过网格显示,但无法编辑

public void LoadExceltotheGrid()
{
    string connectionString = "";
    string fileLocation = MapPath("FileMe20140107.xlsx");
    string fileExtension = Path.GetExtension(fileLocation);
    if (fileExtension == ".xls")
    {
        connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
        fileLocation + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
    }
    else if (fileExtension == ".xlsx")
    {
        connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" +
        fileLocation + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
    }
    System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection(connectionString);
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
    cmd.CommandType = System.Data.CommandType.Text;
    cmd.Connection = con;
    System.Data.OleDb.OleDbDataAdapter dAdapter = new System.Data.OleDb.OleDbDataAdapter(cmd);
    DataTable dtExcelRecords = new DataTable();
    con.Open();
    DataTable dtExcelSheetName = con.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null);
    string getExcelSheetName = dtExcelSheetName.Rows[0]["Table_Name"].ToString();
    cmd.CommandText = "SELECT * FROM [" + getExcelSheetName + "]";
    dAdapter.SelectCommand = cmd;
    dAdapter.Fill(dtExcelRecords);
    GridView1.DataSource = dtExcelRecords;
    GridView1.DataBind();
}

老实说,这是一项非常复杂的任务——Office格式非常复杂,不容易编写。对于xls格式来说尤其如此——这几乎不可能以本机方式读/写。有像Aspose.Cells这样的第三方工具可以做到这一点,但你必须支付许可费

通过OLedb实现的方法适用于简单的用例,但即使是对格式结构的简单更改也会使其失效,而且速度很慢。所以,这似乎是一个解决方案,但它充其量只是一个半途而废的解决方案,将导致维护网格无休无止


xlsx格式更易于读/写,因此,如果您可以放弃对xls文件的支持,您就有更好的机会使用该格式。该格式称为“Office open xml”,微软为其提供了sdk。这个SDK对用户不是很友好,而且非常简单,因此我建议使用像EPPLUS这样的库来读/写文件。这是非常容易,快速和无成本。它甚至有从数据表转换到数据表的方法。

我能够使用SkyDrive完成我的任务

  • 首先上传SkyDrive中的文件(假设我已经有一个帐户)
  • 获取文件的链接并将其嵌入页面
您应该能够在自己的网站中嵌入Office 365的Excel Web应用程序,但我相信xlsx必须存储在云中(SkyDrive/Office365/Sharepoint Online)。重新发明Excel将被证明是极其困难的,至少该应用程序已经存在并被广泛使用。我不能做太多,我的任务仅限于创建一个函数,该函数将调用excel文件,并通过web查看该文件,并使其可编辑。那时,你的任务是一个不可能的要求。