c# - [C#] 为 openOffice Calc 导出 xls 中的 DatagridView

标签 c# excel export export-to-excel openoffice-calc

我有在 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/

相关文章:

c# - 如何在 vim 中使用 C# 代码语句进行排序?

c# - Windows 服务在 Windows 关闭时的行为如何?

c# - 将两个 C# DbGeography 多边形连接成一个多边形

C++ 如何将 double 的全精度写入 .dat 文件

c# - 在 Azure 网站中使用 Azure SDK 时出现间歇性 SSL/TLS 错误

excel - 合并单元格文本详细信息

vba - 如何解决错误的 "spreadsheet locked for editing"问题?

mysql - Excel VBA 连接到远程 MySQL 时的错误处理

mysql - 在 R 中建模并在 SQL 中评分

java - 使用 Java Eclipse 创建带有 .properties 文件的可运行 JAR