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

时间:2014-02-12 07:32:50

标签: c# asp.net excel web oledb

规范

  • 使用.Net 3.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();
}

2 个答案:

答案 0 :(得分:0)

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

通过OLedb的方法适用于简单的用例,但即使对格式结构进行简单的更改也会引起它,但也很慢。所以这似乎是一个解决方案,但它最好是一个半解决方案,这将导致维护网格无法结束。

xlsx格式更易于读/写,因此如果您可以放弃对xls文件的支持,那么您有更好的机会使用该格式。这种格式称为“Office open xml”,有一个来自Microsoft的sdk。这个SDK不是非常用户友好且非常简单,所以我建议像EPPLUS这样的库来读/写文件。它非常简单,快速且无需任何费用。它甚至还有从/向数据表转换的方法。

答案 1 :(得分:0)

我能够使用SkyDrive完成任务。 Working with Microsoft OneDrive folders and files

  • 首先在SkyDrive中上传文件(假设我已经拥有一个帐户)。
  • 获取文件的链接并将其嵌入页面。