为什么此代码会在写入的两行之间插入一个空行(C# Excel Interop)?
Why does this code insert a blank row between two rows written (C# Excel Interop)?
在我的 C# (.NET 4.5) Windows Forms 应用程序中使用 Excel Interop,我像这样调整了 here 中的代码(删除了 Resharper 变灰的冗余内容,并且在 "missing" 参数之前添加 "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"),并将 "fruits" 写入单元格,但不是从第 5 行开始(其中 "Apple" 应该是)但是在第 6 行,正如您在此处看到的(突出显示不需要的空白行):
它可能有(更多),但这可能至少是 ListObject 不知道要排序和过滤什么的部分原因,单击它时提供的选项证明了这一点如此处所示:
为什么添加了第 5 行空白,我该如何避免?
当您从范围创建 ListObject
并说 table 没有 header 时,它会将范围向下移动一行并添加一个 Column1
单元格。
在上面的代码中你说创建一个从 [4,1]
到 [4,1]
的 table 而你说 table 没有 headers,所以它创建一个包含一行的 table 并添加一个 Column1
header 并将所有内容向下移动 1 行。所以结果就是你对excel说的给你做的。
您可以通过指定正确的范围并说您有一个 header 来更正它。
在下面的代码中,我首先在 [4,1]
处添加一个 Header
,然后添加水果,最后创建从 [4, 1]
到 [14, 1]
的列表,并说table 有 header。所以它保留了我的 header.
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);
}
在我的 C# (.NET 4.5) Windows Forms 应用程序中使用 Excel Interop,我像这样调整了 here 中的代码(删除了 Resharper 变灰的冗余内容,并且在 "missing" 参数之前添加 "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"),并将 "fruits" 写入单元格,但不是从第 5 行开始(其中 "Apple" 应该是)但是在第 6 行,正如您在此处看到的(突出显示不需要的空白行):
它可能有(更多),但这可能至少是 ListObject 不知道要排序和过滤什么的部分原因,单击它时提供的选项证明了这一点如此处所示:
为什么添加了第 5 行空白,我该如何避免?
当您从范围创建 ListObject
并说 table 没有 header 时,它会将范围向下移动一行并添加一个 Column1
单元格。
在上面的代码中你说创建一个从 [4,1]
到 [4,1]
的 table 而你说 table 没有 headers,所以它创建一个包含一行的 table 并添加一个 Column1
header 并将所有内容向下移动 1 行。所以结果就是你对excel说的给你做的。
您可以通过指定正确的范围并说您有一个 header 来更正它。
在下面的代码中,我首先在 [4,1]
处添加一个 Header
,然后添加水果,最后创建从 [4, 1]
到 [14, 1]
的列表,并说table 有 header。所以它保留了我的 header.
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);
}