代码之家  ›  专栏  ›  技术社区  ›  aleroot

[C#]导出xls中的DatagridView for openOffice Calc

  •  2
  • aleroot  · 技术社区  · 15 年前

    我有一个在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>");
                }
    }
    

    如果我尝试用microsoftexcel打开生成的XLS,一切正常,但是如果尝试用openofficecalc打开,给我一个导入屏幕,我就无法打开spredsheet。

    为什么? 如何导出与openoffice calc兼容的Excel工作表?

    3 回复  |  直到 15 年前
        1
  •  1
  •   Kamran Khan    15 年前

    首先,似乎要将xml文件保存为xls。microsoftexcel可以打开xml文件,而 可能 计算不能。我建议您使用 Excel object 然后试着用计算器打开它。这个 example 可能会有帮助。

        2
  •  1
  •   Pat Daburu    15 年前

        3
  •  0
  •   Reva Info Solution    11 年前

    请找到关闭文件流所需的工作代码fs.关闭()

    StreamWriter fs=新建StreamWriter(应用程序.StartupPath+ "\导出.xls“,假);

                        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 <= dgvReport.Columns.Count - 1; x++)
                        {
                            fs.WriteLine("            <ss:Column ss:Width=\"{0}\"/>", dgvReport.Columns[x].Width);
                        }
                        fs.WriteLine("            <ss:Row ss:StyleID=\"1\">");
                        for (int i = 0; i <= dgvReport.Columns.Count - 1; i++)
                        {
                            fs.WriteLine("                <ss:Cell>");
                            fs.WriteLine(string.Format("                   <ss:Data ss:Type=\"String\">{0}</ss:Data>", dgvReport.Columns[i].HeaderText));
                            fs.WriteLine("                </ss:Cell>");
                        }
                        fs.WriteLine("            </ss:Row>");
                        for (int intRow = 0; intRow <= dgvReport.RowCount - 2; intRow++)
                        {
                            fs.WriteLine(string.Format("            <ss:Row ss:Height =\"{0}\">", dgvReport.Rows[intRow].Height));
                            for (int intCol = 0; intCol <= dgvReport.Columns.Count - 1; intCol++)
                            {
                                fs.WriteLine("                <ss:Cell>");
                                fs.WriteLine(string.Format("                   <ss:Data ss:Type=\"String\">{0}</ss:Data>", (dgvReport.Rows[intRow].Cells[intCol].Value != null) ? dgvReport.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>");
                        fs.Close();