【发布时间】:2013-05-10 03:02:30
【问题描述】:
我写了一个导出函数,以便我的 datagridview 中的所有数据 当我点击一个按钮时,它被导出到一个 Excel 文件中。 现在这给我带来了一个问题,我想定义我的 excel 列的列宽。 在我打开 Excel 的那一刻,我总是在日期列中得到 ########。 这也是由于列不够宽。
它在 Excel 中的外观示例:
所以不用多说,这是我的代码。
private void excelToolStripMenuItem_Click(object sender, EventArgs e)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "Excel Documents (*.xls)|*.xls";
sfd.FileName = "reminders_MM.xls"; // Default File Name
if (sfd.ShowDialog() == DialogResult.OK)
{
ToCsV(dataGridViewReminders, sfd.FileName);
}
MessageBox.Show("Alle data is succesvol geëxporteerd!", "Voltooid", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void ToCsV(DataGridView dgv, string filename)
{
string stOutput = "";
// Export titles:
string sHeaders = "";
for (int j = 2; 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 = 2; 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();
}
问题很简单。如何定义将进入我的 Excel 文件的列的宽度?我希望每一列都更宽。
【问题讨论】:
-
您不能,因为您实际上并没有创建 Excel 文件,而是创建了 Excel 将打开的 CSV 文件,并且您无法控制 Excel 如何处理 CSV 文件。唯一的方法是创建一个实际的 Excel 文件,例如使用 NPOI
-
所以没有单一的方法可以控制这些列宽? ://
标签: c# datagridview export-to-excel column-width