Exemple #1
0
        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();
            }
        }