我有这个代码用于将数据导出到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文件时,单元格已经格式化,我希望所有单元格都有文本格式化。
答案 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。