使用n#34; text"将DataGridView导出到Excel 2013中所有单元格的单元格格式

时间:2015-01-23 11:07:24

标签: c#

我有这个代码用于将数据导出到excel:

private void ToCsV(DataGridView dGV, string filename)
{
    string stOutput = "";
    // Export titles:
    string sHeaders = "";

    for (int j = 0; j < dGV.Columns.Count; j++)
        sHeaders = sHeaders.ToString() + Convert.ToString(dGV.Columns[j].HeaderText) + "\t";
    stOutput += sHeaders + "\r\n";
    // Export data.
    for (int i = 0; i < dGV.RowCount - 1; i++)
    {
        string stLine = "";
        for (int j = 0; j < dGV.Rows[i].Cells.Count; j++)
            stLine = stLine.ToString() + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\t";
        stOutput += stLine + "\r\n";
    }
    Encoding utf16 = Encoding.GetEncoding(1254);
    byte[] output = utf16.GetBytes(stOutput);
    FileStream fs = new FileStream(filename, FileMode.Create);
    BinaryWriter bw = new BinaryWriter(fs);
    bw.Write(output, 0, output.Length); //write the encoded file
    bw.Flush();
    bw.Close();
    fs.Close();
}  
private void button6_Click(object sender, EventArgs e)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "Excel Documents (*.xlsx)|*.xlsx";
    sfd.FileName = "export.xls";
    if (sfd.ShowDialog() == DialogResult.OK)
    {
        //ToCsV(dataGridView1, @"c:\export.xls");
        ToCsV(dataGridView2, sfd.FileName); // Here dataGridview1 is your grid view name 
    }  
}

但是当我打开excel文件时,单元格已经格式化,我希望所有单元格都有文本格式化。

3 个答案:

答案 0 :(得分:0)

您不能简单地创建excel文件,例如创建.txt文件。您现在正在做的是创建一个CSV文件并在excel中打开它。在这种情况下,您不保留样式信息[根据需要进行格式化]。

如果要创建格式良好的Excel文件[.XLSX文件,如Open XMl文件格式],则需要使用库。它们包含压缩在一起的XML文件结构,您可以定义每个单元格格式应该是什么。

有很多选项,EPPlus是第三方库。 Open XMl SDK 2.5是微软的推荐。您还可以选择使用Office Interops,这也是您可以使用的解决方案。

答案 1 :(得分:0)

具有XLS扩展名的CSV文件不是Excel文件。 MS Excel知道读取CSV文件并将其显示在工作表中,但不是真正的XLS或XLSX文件。此外,CSV文件无法存储单元格格式,只能存储数据。

要导出Excel文件,您需要一个Excel库,例如EasyXLS

请查看有关exporting DataGridView to Excel with cell formatting

的代码示例

我也不建议使用Office Interop和Microsoft。有关详细信息,请参阅Microsoft的why not to use OLE Automation

答案 2 :(得分:0)

由于您将数据保存为普通CSV,因此您无法进行任何&#34;单元格格式设置&#34;。一般来说,您在Excel中看到的始终是它的(#)智能解释&#34;在导入的文件中找到的数据(例如,如果你的某些东西看起来像&#34;数字&#34;,它会自动设置单元格格式以显示数字,因此右对齐)。

要强制Excel将项目定义为文本值,只需将其放在双引号内并在其前面加上等号:

stLine += "=\"" + Convert.ToString(dGV.Rows[i].Cells[j].Value) + "\"\t";

这将写为132: =&#34; 132&#34; 和Excel将其显示为字符串132(即左对齐)而不是数字132。