规范
问题: 需要从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();
}
答案 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