1

在我使用 Excel Interop 的 C# (.NET 4.5) Windows Forms 应用程序中,我从这里调整了代码(删除 Resharper 变灰的冗余内容,并在“丢失”参数之前添加“Type.”(并将它们的大小写更改为上):

private void WriteListObjectTestSheet()
{
    _xlSheetPlatypus.Cells[5, 1] = "Apple";
    _xlSheetPlatypus.Cells[6, 1] = "Strawberry";
    _xlSheetPlatypus.Cells[7, 1] = "Cashew";
    _xlSheetPlatypus.Cells[8, 1] = "Kumquat";
    _xlSheetPlatypus.Cells[9, 1] = "Pomegranate";
    _xlSheetPlatypus.Cells[10, 1] = "Banana";
    _xlSheetPlatypus.Cells[11, 1] = "Pineapple";
    _xlSheetPlatypus.Cells[12, 1] = "Kiwi";
    _xlSheetPlatypus.Cells[13, 1] = "Huckleberry";
    _xlSheetPlatypus.Cells[14, 1] = "Gooseberry";

    Excel.ListObject fruitList =
        _xlSheetPlatypus.
            ListObjects.Add(Excel.XlListObjectSourceType.xlSrcRange,
                _xlSheetPlatypus.Range[
                    _xlSheetPlatypus.Cells[4, 1],
                    _xlSheetPlatypus.Cells[4, 1]], 
                Type.Missing, Excel.XlYesNoGuess.xlNo);
}

ListObject 根据需要添加到第 4 行第 1 列(或“A”),并将“水果”写入单元格,但不是从第 5 行(应该是“Apple”)开始,而是从第 6 行开始,如你可以在这里看到(不需要的空白行突出显示):

在此处输入图像描述

它可能有(更多),但这可能至少是 ListObject 不知道要排序和过滤什么的部分原因,正如它在单击时提供的选项所证明的那样,如下所示:

在此处输入图像描述

为什么添加了第 5 行空白,我该如何防止呢?

4

1 回答 1

1

当您从范围创建一个ListObject并说表格没有标题时,它将范围向下移动一行并添加一个Column1单元格。

在上面的代码中,您说创建一个表 from [4,1]to[4,1]并且您说该表没有标题,因此它创建一个包含一行的表并添加一个Column1标题并将所有内容向下移动 1 行。所以结果就是你说要为你做的。

您可以通过指定正确的范围并说您有标题来更正它。

在下面的代码中,我首先添加了Headerat[4,1]然后添加了 fruits 并最后从[4, 1]to创建了列表[14, 1],并说该表有标题。所以它保留了我的标题。

using XL = Microsoft.Office.Interop.Excel;

private void button1_Click(object sender, EventArgs e)
{
    XL.Application application = new XL.Application();
    application.Visible = true;
    XL.Workbook book = application.Workbooks.Add();
    XL.Worksheet sheet = (XL.Worksheet)book.Worksheets[1];
    sheet.Cells[4, 1] = "Header";
    sheet.Cells[5, 1] = "Apple";
    sheet.Cells[6, 1] = "Strawberry";
    sheet.Cells[7, 1] = "Cashew";
    sheet.Cells[8, 1] = "Kumquat";
    sheet.Cells[9, 1] = "Pomegranate";
    sheet.Cells[10, 1] = "Banana";
    sheet.Cells[11, 1] = "Pineapple";
    sheet.Cells[12, 1] = "Kiwi";
    sheet.Cells[13, 1] = "Huckleberry";
    sheet.Cells[14, 1] = "Gooseberry";

    XL.ListObject fruitList = 
        sheet.ListObjects.Add(XL.XlListObjectSourceType.xlSrcRange,
            sheet.Range[sheet.Cells[4, 1], sheet.Cells[14, 1]], 
                Type.Missing, XL.XlYesNoGuess.xlYes);
}

在此处输入图像描述 在此处输入图像描述

于 2015-12-04T20:51:13.110 回答