0

我试图使用 OLEDB 在工作表的末尾插入一个新行。工作表在 Range (a1:xx) 中有一个格式表,其中存储了格式和公式。但是 OLEDB insert 没有任何格式。

我已经阅读了如何使用 c# 将一行的格式复制到 Excel 中的另一行的帖子,讨论获取格式,但对我不起作用。另外,我认为它不会得到公式。

在Excel UI中,格式化表格的右下角会出现一个双箭头,我们可以拖动它来扩大格式化表格的范围。

图片:它在 Excel 中的样子

我们可以通过 C# 做些什么?

谢谢。

        Excel.Range last = xlWS.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
        Excel.Range RngToCopyOri = xlWS.get_Range("A1", last).EntireRow;
        Excel.Range RngToCopy = RngToCopyOri.Resize[RngToCopyOri.Rows.Count + 1, RngToCopyOri.Columns.Count]; //because insert will add only 1 row, so the range would be one row larger
        Excel.Range RngToInsert = xlWS.get_Range("A1", Type.Missing).EntireRow;
        RngToInsert.Insert(Excel.XlInsertShiftDirection.xlShiftDown, RngToCopy.Copy(Type.Missing));

我试图将 Range(A1,lowerleft cell) 复制到其原始位置,但没有任何改变。

4

1 回答 1

0

我尝试了 Range.resize、自动填充、自动格式化。他们都有一些问题。我终于放弃了使用 OLEDB 插入数据。相反,我用

worksheet.UsedRange.Item[rowNo,getColumnIndex(worksheet,columnTitle)]=value

private int getColumnIndex(Excel.Worksheet sheetname, string header) {
        int index=0;
        Excel.Range activeRange=sheetname.UsedRange;
        for (int i = 1; i <= activeRange.Columns.Count; i++) {
            if (header == (string)(activeRange.Item[1,i] as Excel.Range).Value) {
                index = i;
            }
        }
        if(index==0)
            throw some exception you like;
        return index;
    }

getColumnIndex 函数旨在从...定位 SELECT [column] 中的列

这样,格式表会自动扩展到您输入值的范围。

于 2016-02-04T19:59:46.763 回答