使用NetOfficeFW将DataGridView导出到Excel

问题描述 投票:0回答:1

[我使用Microsoft.Office.Interop将DataGridView导出到Excel,但是我不再愿意使用MS Office并转移到LibreOffice和WPS。

我决定使用替代方法(NetOfficeFW),并将原始代码修改为以下代码,以将NetGridFW与.Net Framework 4.8 dev一起使用,将DataGridView导出到excel中,

           string time = DateTime.Now.ToString("dd-MM-yyyy");
            Excel.Application app = new Excel.Application();
            Excel.Workbook workbook = app.Workbooks.Add(Type.Missing);
            //Make Worksheet Name
            Excel.Worksheet worksheet = null;
            //worksheet = workbook.ActiveSheet;
           // worksheet = workbook.Sheets["Sheet1"];
            worksheet.Name = "MySheetName-" + time;
            worksheet.Range("A1", "M1").Interior.Color = XlRgbColor.rgbGrey;
            worksheet.Range("A1", "M1").Font.Color = XlRgbColor.rgbWhite;

            //Set Colum width
            app.Columns.AutoFit();
            app.Columns.ColumnWidth = 14;
            app.Columns[1].Hidden = true;
            app.Columns[2].Hidden = true;
            app.Columns[3].ColumnWidth = 13;
            app.Columns[4].ColumnWidth = 15;
            app.Columns[5].ColumnWidth = 9;
            app.Columns[6].ColumnWidth = 9;
            app.Columns[7].ColumnWidth = 9;
            app.Columns[8].ColumnWidth = 9;
            app.Columns[9].ColumnWidth = 9;
            app.Columns[10].ColumnWidth = 9;
            app.Columns[11].ColumnWidth = 9;
            app.Columns[12].ColumnWidth = 9;
            app.Columns[13].ColumnWidth = 9;
            app.Columns[14].ColumnWidth = 25;

            ////TextAlignment
            app.Columns[3].HorizontalAlignment = XlHAlign.xlHAlignLeft;
            app.Columns[4].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[5].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[6].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[7].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[8].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[9].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[10].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[11].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[12].HorizontalAlignment = XlHAlign.xlHAlignCenter;
            app.Columns[13].HorizontalAlignment = XlHAlign.xlHAlignCenter;

            //Set Header & Footer
            ckconnection.getGeneralSetting();
            worksheet.PageSetup.LeftHeader = "&\"Calibri\"&14&K8B2252" + DEVELOPER NAME;
            worksheet.PageSetup.CenterHeader = "&\"Calibri\"&14&K8B2252 REPORT NAME";
            worksheet.PageSetup.RightHeader = "&\"Calibri\"&14&K8B2252" + company_name;
            worksheet.PageSetup.CenterFooter = "&[Page] of &[Pages]";
            worksheet.PageSetup.RightFooter = time;
            //Page size and layout
            worksheet.PageSetup.Orientation = XlPageOrientation.xlLandscape;
            worksheet.PageSetup.PaperSize = XlPaperSize.xlPaperA4;

            // Narrow Margins
            worksheet.PageSetup.LeftMargin = app.InchesToPoints(0.25);
            worksheet.PageSetup.RightMargin = app.InchesToPoints(0.25);
            worksheet.PageSetup.TopMargin = app.InchesToPoints(0.75);
            worksheet.PageSetup.BottomMargin = app.InchesToPoints(0.75);
            worksheet.PageSetup.HeaderMargin = app.InchesToPoints(0.3);
            worksheet.PageSetup.FooterMargin = app.InchesToPoints(0.3);

            for (int i = 1; i < gridView.Columns.Count + 1; i++)
            {
                Excel.Range xlRange = (Excel.Range)app.Cells[1, i];
                xlRange.Font.Bold = -1;
                xlRange.Borders.LineStyle = XlLineStyle.xlContinuous;
                xlRange.Borders.Weight = 1d;
                xlRange.HorizontalAlignment = XlHAlign.xlHAlignCenter;
                app.Cells[1, i] = gridView.Columns[i - 1].HeaderText;
            }
            for (int i = 0; i < gridView.Rows.Count; i++)
            {
                for (int j = 0; j < gridView.Columns.Count; j++)
                {
                    Excel.Range xlRange = (Excel.Range)app.Cells[i + 2, j + 1];
                    xlRange.Borders.LineStyle = XlLineStyle.xlContinuous;
                    xlRange.Borders.Weight = 1d;
                    app.Cells[i + 2, j + 1] = gridView.Rows[i].Cells[j].Value.ToString();
                }
            }
            var saveFileDialoge = new SaveFileDialog();
            saveFileDialoge.FileName = "MySheetName-" + time + ".xlsx";
            if (saveFileDialoge.ShowDialog() == DialogResult.OK)
            {
                app.ActiveWorkbook.SaveAs(saveFileDialoge.FileName);
            }
            app.Quit();

不幸的是,以下两行中有突出显示的错误:

app.Cells[1, i] = gridView.Columns[i - 1].HeaderText;

app.Cells[i + 2, j + 1] = gridView.Rows[i].Cells[j].Value.ToString();

错误文本为:

无法将字符串转换为NetOffice.Excel.Api.Range

我该如何解决此问题?

c# excel winforms netoffice
1个回答
0
投票

实际上,我没有从NetOffice的开发人员那里获得任何支持,所以我转而使用ClosedXML,它确实很容易使用。这是无需安装MS Office即可与我一起使用的代码...使用ClosedXML

                //Creating DataTable.
            DataTable dt = new DataTable();

            //Adding the Columns.
            foreach (DataGridViewColumn column in gridView.Columns)
            {
                dt.Columns.Add(column.HeaderText, typeof(string));
            }

            //Adding the Rows.
            foreach (DataGridViewRow row in gridView.Rows)
            {
                dt.Rows.Add();
                foreach (DataGridViewCell cell in row.Cells)
                {
                    dt.Rows[dt.Rows.Count - 1][cell.ColumnIndex] = cell.Value.ToString();
                }
            }

            //Exporting to Excel

            using (XLWorkbook workbook = new XLWorkbook())
            {
                string time = DateTime.Now.ToString("dd-MM-yyyy");
                // add a new Workbook and worksheet
                var worksheet = workbook.Worksheets.Add(dt, "SheetName-" + time);
                workbook.Worksheet(1).Cells("A1:M1").Style.Fill.BackgroundColor = XLColor.Gray;
                workbook.Worksheet(1).Cells("A1:M1").Style.Font.FontColor = XLColor.White;
                workbook.Worksheet(1).Cells("A1:M1").Style.Font.Bold = true;

                worksheet.Column(1).Hide();
                worksheet.Column(2).Hide();
                worksheet.Column(3).Width = 13;
                worksheet.Column(4).Width = 21;
                worksheet.Column(5).Width = 6.43;
                worksheet.Column(6).Width = 19;
                worksheet.Column(7).Width = 9;
                worksheet.Column(8).Width = 9;
                worksheet.Column(9).Width = 9;
                worksheet.Column(10).Width = 9;
                worksheet.Column(11).Width = 9;
                worksheet.Column(12).Width = 9;
                worksheet.Column(13).Width = 20.60;
                worksheet.Column(14).Hide();
                worksheet.Column(15).Hide();
                ////TextAlignment
                ///
                worksheet.Column(3).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                worksheet.Column(4).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Left;
                worksheet.Column(5).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(6).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(7).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(8).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(9).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(10).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(11).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(12).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                worksheet.Column(13).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;
                //worksheet.Column(14).Style.Alignment.Horizontal = XLAlignmentHorizontalValues.Center;


                ////Set Header & Footer
                ckconnection.getGeneralSetting();
                worksheet.PageSetup.Header.Left.AddText("&\"Tahoma\"&14&K8B2252" + ckconnection.company_name);
                worksheet.PageSetup.Header.Center.AddText("&\"Tahoma\"&14&K8B2252 GATE MOVE REPORT");
                worksheet.PageSetup.Header.Right.AddText("&\"Tahoma\"&14&K8B2252" + ckconnection.depot_name);

                worksheet.PageSetup.Footer.Center.AddText("&[Page]/&[Pages]");
                worksheet.PageSetup.Footer.Right.AddText(time);
                //Page size and layout
                worksheet.PageSetup.PageOrientation = XLPageOrientation.Landscape;
                worksheet.PageSetup.PaperSize = XLPaperSize.A4Paper;

                //// Narrow Margins
                worksheet.PageSetup.Margins.Left = (0.25);
                worksheet.PageSetup.Margins.Right = (0.25);
                worksheet.PageSetup.Margins.Top = (0.75);
                worksheet.PageSetup.Margins.Bottom = (0.75);
                worksheet.PageSetup.Margins.Header = (0.3);
                worksheet.PageSetup.Margins.Footer = (0.3);

                //Save Excel

                var saveFileDialoge = new SaveFileDialog();
                saveFileDialoge.FileName = "SheetName-" + time + ".xlsx";
                if (saveFileDialoge.ShowDialog() == DialogResult.OK)
                {
                    workbook.SaveAs(saveFileDialoge.FileName);
                }
                // close excel and dispose reference
                workbook.Dispose();
            }
© www.soinside.com 2019 - 2024. All rights reserved.