private void ExportGridFast() //Exporta el grid rápidamente a un archivo de excel (experimental) { // TODO: Ajustar ancho de columnas, eliminar la columna A de excel (está vacía) SaveFileDialog sfd = new SaveFileDialog { Filter = "Excel (*.xlsx)|*.xlsx", FileName = OutFileNameTextBox.Text + ".xlsx", Title = "Guardar como archivo de excel", DefaultExt = ".xlsx", ValidateNames = true }; if (sfd.ShowDialog() == DialogResult.OK) { XMLDataGridView.SelectAll(); DataObject dataObj = XMLDataGridView.GetClipboardContent(); if (dataObj != null) { Clipboard.SetDataObject(dataObj); } Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); Microsoft.Office.Interop.Excel._Worksheet worksheet = null; object misValue = System.Reflection.Missing.Value; try { app.Visible = false; worksheet = workbook.Sheets[1]; worksheet = workbook.ActiveSheet; List <DataGridViewColumn> listVisible = new List <DataGridViewColumn>(); foreach (DataGridViewColumn col in XMLDataGridView.Columns) { if (col.Visible) { listVisible.Add(col); } } for (int i = 0; i < listVisible.Count; i++) { worksheet.Cells[1, i + 2] = listVisible[i].HeaderText; ExportProgressBar.PerformStep(); } app.Visible = false; worksheet = workbook.Sheets[1]; worksheet = workbook.ActiveSheet; Microsoft.Office.Interop.Excel.Range CR = (Microsoft.Office.Interop.Excel.Range)worksheet.Cells[2, 1]; CR.Select(); worksheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true); worksheet.Columns["A"].Delete(); worksheet.Columns.AutoFit(); ExportProgressBar.Value = ExportProgressBar.Maximum; MessageBox.Show("El archivo fue exportado con éxito.", "Info", MessageBoxButtons.OK, MessageBoxIcon.Information); if (File.Exists(sfd.FileName)) { try { File.Delete(sfd.FileName); //Elimina el archivo existente } catch (IOException ex) { MessageBox.Show("No fue posible eliminar el archivo anterior. " + ex.Message); return; } } if (MessageBox.Show("¿Deseas abrir el archivo generado?", "Question", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { workbook.SaveAs(sfd.FileName); workbook.Saved = true; app.Visible = true; } else { workbook.SaveAs(sfd.FileName); workbook.Saved = true; workbook.Close(false); } } catch (Exception e) { workbook.Close(false); MessageBox.Show(e.Message); } XMLDataGridView.ClearSelection(); } }