使用c#在excel中设置边框属性在多个excel文件的情况下不工作

本文关键字:excel 文件 情况下 工作 属性 设置 边框 使用 | 更新日期: 2023-09-27 18:07:17

我正在用c#语言使用Microsoft.Office.Interop.Excel库设计一个小程序。我的程序读取excel文件(其名称为1.xlss,2.xlsx等),并制作一个新的excel文件,然后将所有excel文件的数据复制到新的excel文件中,并有一行空白。我还设置了某些属性,如边框,字体,背景色等单元格。

对于第一个excel文件(1.xls)来说一切都很好,但在第二个,第三个等等的情况下,它没有设置单元格的边界属性。这是我的代码

// data member initialization for reading the sheet
        Excel.Application app;
        Excel.Workbook workbook;
        Excel.Worksheet worksheet;
        Excel.Range range;
        // data member initialization for writing sheet
        Excel.Application finalApp;
        Excel.Workbook finalWorkBook;
        Excel.Worksheet finalWorkSheet;
        String path = this.textBox1.Text;
        String numberOfFiles = (String)this.comboBox1.SelectedItem;
        int count = 1;
        int row = 1, col = 1;
        try
        {
            // Object creation for the final sheet
            finalApp = new Excel.ApplicationClass();
            finalApp.Visible = true;
            finalWorkBook = finalApp.Workbooks.Add(1);
            finalWorkSheet = (Excel.Worksheet)finalWorkBook.Sheets[1];

            // opening a excel file
            app = new Excel.ApplicationClass();
            Excel.Borders b=null;
            Excel.Borders fb = null;
            try
            {
                for (int k = 0; k < Int32.Parse(numberOfFiles); k++)
                {
                    fullPath = @path + @"'" + count + ".xlsx";
                    workbook = app.Workbooks.Open(fullPath, Missing.Value, Missing.Value,
                        Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value
                        , Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                        Missing.Value);
                    worksheet = (Excel.Worksheet)workbook.Sheets.get_Item(1);
                    range = worksheet.UsedRange;
                    int cnum1 = range.Columns.Count;
                    int rnum1 = range.Rows.Count;
                    int i, j;
                    for (i = 1; i <= rnum1; i++)
                    {
                        for (j = 1; j <= cnum1; j++)
                        {
                            if ((range.Cells[i, j] as Excel.Range).Value2 != null)
                            {
                                string value1 = (range.Cells[i, j] as Excel.Range).Value2.ToString();
                                finalWorkSheet.Cells[row, col] = value1;
                                b= (Excel.Borders)(range.Cells[i, j] as Excel.Range).Borders;
                                //MessageBox.Show(b.Weight.ToString());
                                fb=(finalWorkSheet.Cells[i, j] as Excel.Range).Borders;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight= b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].Weight;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].Weight = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].Weight;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].Weight = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].Weight;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].Weight = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].Weight;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeBottom].LineStyle;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].LineStyle = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeTop].LineStyle;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeLeft].LineStyle;
                                fb[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].LineStyle = b[Microsoft.Office.Interop.Excel.XlBordersIndex.xlEdgeRight].LineStyle;
                                //fb.Color = b.Color;
                                //(finalWorkSheet.Cells[i, j] as Excel.Range).BorderAround(b.LineStyle,(Excel.XlBorderWeight)b.Weight,
                                //(Excel.XlColorIndex)b.ColorIndex,b.Color);
                            } 
                            (finalWorkSheet.Cells[row, col] as Excel.Range).Interior.Color = (range.Cells[i, j] as Excel.Range).Interior.Color;
                            (finalWorkSheet.Cells[row, col] as Excel.Range).Font.Color = (range.Cells[i, j] as Excel.Range).Font.Color;
                            col++;
                        }
                        row++;
                        col = 1;
                    }
                    //finalWorkBook.SaveAs("hello.xlsx", Excel.XlFileFormat.xlExcel4Workbook, Missing.Value,
                    //Missing.Value, Missing.Value, Missing.Value, Excel.XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value,
                    //Missing.Value, Missing.Value, Missing.Value);
                    workbook.Close(false, false, Missing.Value);
                    count++;
                    row++;
                    col = 1;
                }
            }
            catch (FileNotFoundException fnfe)
            {
                MessageBox.Show("Error while opening the file "+fullPath);
            }
            //finalWorkBook.Close(true,false,Missing.Value);
        }
        catch (Exception ex)
        {
            MessageBox.Show(@"Some Error has occurred.Please check the path Correctly
            whether it's correct or not");
        }
    }

使用c#在excel中设置边框属性在多个excel文件的情况下不工作

fb=(finalWorkSheet.Cells[i, j] as Excel.Range).Borders;
应该

fb=(finalWorkSheet.Cells[row, col] as Excel.Range).Borders;