我有在 Excel 工作表中导出 datagridView 的功能:
public void ExportGridToExcel(DataGridView TheGrid, string FileName)
{
using (System.IO.StreamWriter fs = new System.IO.StreamWriter(FileName, false))
{
fs.WriteLine("<?xml version=\"1.0\"?>");
fs.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>");
fs.WriteLine("<ss:Workbook xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">");
fs.WriteLine(" <ss:Styles>");
fs.WriteLine(" <ss:Style ss:ID=\"1\">");
fs.WriteLine(" <ss:Font ss:Bold=\"1\"/>");
fs.WriteLine(" </ss:Style>");
fs.WriteLine(" </ss:Styles>");
fs.WriteLine(" <ss:Worksheet ss:Name=\"Sheet1\">");
fs.WriteLine(" <ss:Table>");
for (int x = 0; x <= TheGrid.Columns.Count - 1; x++)
{
fs.WriteLine(" <ss:Column ss:Width=\"{0}\"/>", TheGrid.Columns[x].Width);
}
fs.WriteLine(" <ss:Row ss:StyleID=\"1\">");
for (int i = 0; i <= TheGrid.Columns.Count - 1; i++)
{
fs.WriteLine(" <ss:Cell>");
fs.WriteLine(string.Format(" <ss:Data ss:Type=\"String\">{0}</ss:Data>", TheGrid.Columns[i].HeaderText));
fs.WriteLine(" </ss:Cell>");
}
fs.WriteLine(" </ss:Row>");
for (int intRow = 0; intRow <= TheGrid.RowCount - 2; intRow++)
{
fs.WriteLine(string.Format(" <ss:Row ss:Height =\"{0}\">", TheGrid.Rows[intRow].Height));
for (int intCol = 0; intCol <= TheGrid.Columns.Count - 1; intCol++)
{
fs.WriteLine(" <ss:Cell>");
fs.WriteLine(string.Format(" <ss:Data ss:Type=\"String\">{0}</ss:Data>", (TheGrid.Rows[intRow].Cells[intCol].Value != null) ? TheGrid.Rows[intRow].Cells[intCol].Value.ToString() : string.Empty));
fs.WriteLine(" </ss:Cell>");
}
fs.WriteLine(" </ss:Row>");
}
fs.WriteLine(" </ss:Table>");
fs.WriteLine(" </ss:Worksheet>");
fs.WriteLine("</ss:Workbook>");
}
}
如果我尝试使用 Microsoft Excel 打开生成的 XLS,一切正常,但如果尝试使用 OpenOffice Calc 打开,给我一个导入屏幕,我无法打开电子表格。
为什么? 如何导出与 openoffice calc 兼容的 Excel 工作表?
最佳答案
首先,您似乎将 xml 文件保存为 xls。 Microsoft Excel 可以打开 xml 文件,而 可能 Calc 不能。我建议您使用 Excel object 创建 Excelsheet然后尝试在 Calc 中打开它。这example可能有帮助。
关于c# - [C#] 为 openOffice Calc 导出 xls 中的 DatagridView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3685753/