[C #] Экспорт DatagridView в xls для openOffice Calc - PullRequest
2 голосов
/ 10 сентября 2010

У меня есть эта функция, которая экспортирует datagridView в лист Excel:

 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>");
            }
}

Если я пытаюсь открыть сгенерированный XLS в Microsoft Excel, то все в порядке, но если я пытаюсь открыть в OpenOffice Calc, откройте экран импорта, и я не смогу открыть таблицу.

Почему? Как сделать экспорт листа Excel, совместимого с openoffice calc?

Ответы [ 3 ]

1 голос
/ 10 сентября 2010

Во-первых, кажется, что вы сохраняете файл xml как xls.Microsoft Excel может открывать файлы XML, тогда как , вероятно, Calc не может.Я бы предложил вам создать таблицу исключений, используя объект Excel , а затем попытаться открыть ее в Calc.Этот пример может помочь.

1 голос
/ 10 сентября 2010

Я полагаю, что у вас есть, но мне интересно, рассматривали ли вы экспорт в формат CSV.И OpenOffice, и Excel (и все, что может импортировать CSV) смогут открыть файл, хотя вы можете потерять некоторые параметры форматирования.

0 голосов
/ 01 апреля 2015

найдите этот рабочий код, который вам нужен, чтобы закрыть Filestream fs.close ()

StreamWriter fs = новый StreamWriter (Application.StartupPath + "\ Export.xls", 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 <= 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();
...