通过网页浏览器打开.xls / .xlsx文件,并为用户编辑

规范

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

我能够使用SkyDrive完成我的任务。 使用Microsoft OneDrive文件夹和文件

  • 首先上传SkyDrive中的文件(因为我已经有一个帐户)。
  • 获取文件的链接并将其embedded到页面中。

这是一个非常复杂的任务说实话 – 办公室格式是如此复杂,不容易写。 对于xls格式尤其如此 – 这本来就是不可能读取/写入的。 有像Aspose.Cells这样的第三方工具可以做到,但是你必须支付许可费。

你的方法通过OLedb适用于简单的用例,但即使对格式结构的简单更改也会抛出,也很慢。 所以这似乎是一个解决scheme,但这是一个最好的解决scheme,这将导致维护电网没有尽头。

xlsx格式的读/写更容易,所以如果你可以放弃对xls文件的支持,你有更好的机会来处理这种格式。 该格式被称为“办公室打开xml”,有一个来自微软的SDK。 这个SDK不是非常用户友好的,所以我build议像EPPLUS这样的库来读/写这些文件。 这是非常简单,快速,不需要花费。 它甚至有方法转换成数据表。