现在的位置: 首页 > 综合 > 正文

c# datagridview导出导入excel 如果用流的方式打开,可以导出,无法读取

2014年11月22日 ⁄ 综合 ⁄ 共 1512字 ⁄ 字号 评论关闭

你导出的文件,其实是一个标准的文本文件(相当于 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

抱歉!评论已关闭.