У меня есть эта функция, экспортировать DataGridView в листе Excel:[C#] Экспорт DataGridView в XLS для OpenOffice Calc
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, дайте мне экран импорта, и я не могу открыть файл spredsheet.
Почему? Как я могу сделать для экспорта листа Excel, совместимого с openoffice calc?
Да, но для использования объекта Excel Мне нужно, чтобы Office был установлен на пользовательском компьютере, как я могу проверить, установлен ли офис на компьютер пользователя? – aleroot
@aleroot: Не обязательно, если вы включили ссылку на сборку в выходном файле проекта, вам не понадобится Office для установки на компьютер пользователя. CSV может, однако, быть более легким выбором, если вам нужна совместимость как для excel, так и для calc. –
Нет, вам нужно, чтобы на каждой машине был установлен Excel, иначе вы получите сообщение об ошибке на компоненте COM ... – aleroot