你导出的文件,其实是一个标准的文本文件(相当于 CSV 文件),根本就不是 EXCEL 文档。你只不过把扩展名改成了 *.xls 冒充 EXCEL 文件而已,本质上就是文本文件,用记事本打开的那种!在 Excel 2003 比较宽宏大量,允许你这种龌龊的冒充行为而已(呵呵),所以在 2003 中你能打开,到了 2007 后不在允许赤裸裸的、龌龊冒充行为(哈哈),所以你的“导出”立即穿帮了。。。。解决办法:微软在 Office 2007 版本开始使用 OpenXML 格式了。何为 OpenXML ?其实就是一种开放标准的 XML 文件,你导出 Excel 2007 文件,只要遵守 OpenXML 格式写入文本就可以了。另外:OpenXML 还涉及到 ZIP 压缩,幸好 .NET 自带 ZIP 压缩类,你可以上网搜一下代码,很多。
当然还有一种办法,直接用xml存储和转换更为简单。如下——
using System.IO;
#region 导入到XML
private void btnLeadInToXml_Click(object sender, EventArgs e)
{
this.openFileDialog1.Filter = "XML文件(*.xml)|*.xml";
if (this.openFileDialog1.ShowDialog() == DialogResult.OK)
{
string filename = this.openFileDialog1.FileName;
DataSet ds = new DataSet();
ds.ReadXml(filename);
this.dgvDictionary.DataSource = ds.Tables[0];
}
}
#endregion
#region 文件导出到XML文件
private void btnExportToXml_Click(object sender, EventArgs e)
{
this.saveFileDialog1.FileName = DateTime.Now.ToString("yyMMddhhmmss");
this.saveFileDialog1.Filter = "XML文件(*.xml)|*.xml";
if (this.saveFileDialog1.ShowDialog() == DialogResult.OK)
{
DataTable dt = (DataTable)this.dgvDictionary.DataSource;
DataSet ds = new DataSet();
ds.Tables.Add(dt.copy());
ds.WriteXml(this.saveFileDialog1.FileName);
MessageBox.Show("数据成功保存到" + this.saveFileDialog1.FileName, "系统提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
#endregion