Select 列 header 文本并检查列的其余部分是否为空,如果为空则删除?
Select column by header text and check if rest of column is empty, delete if empty?
我有一个 excel sheet 格式与下面的 table 类似,如果我知道列 header 文本 "Col2" 我怎么能然后只检查该列中的所有单元格是否为空,如果为空则删除整列?
*Col1 * Col2 * Col3*
********************
*Val * * Val *
*Val * * Val *
我想我需要 select 范围内的 header 并找到具有与相关字符串匹配的 header 的列的索引,我还需要使用 CountA 来计算非空单元格?我认为中间还有一个步骤缺少 select CountA 的列,如果有 0 个非空单元格,我需要删除。
我下面的工作代码打开工作sheet并调整列的大小:
excelApp = new Microsoft.Office.Interop.Excel.Application();
excelBooks = excelApp.Workbooks;
excelBook = excelBooks.Open("test.csv", 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);
excelSheet = excelBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
excelCols = excelSheet.Columns;
i = 1;
while (i < colCount) {
excelCol = excelCols[i] as Microsoft.Office.Interop.Excel.Range;
excelCol.AutoFit();
}
//range for first row
excelRows = excelSheet.Rows;
excelRow = excelRows[1] as Microsoft.Office.Interop.Excel.Range;
有人可以帮忙解决这个问题吗,我试了很多次,但我不太确定如何从这里开始。
首先,将以下 using
指令添加到文件顶部:
using Microsoft.Office.Interop.Excel;
假设您的列 headers 在第 1 行,您可以使用以下方法:
static void DeleteColumnIfEmpty(Worksheet wkst, int colNo)
{
for (int i = 2; i <= wkst.UsedRange.Rows.Count; i++)
{
if (wkst.Cells[i, colNo].Value2 != null) return;
}
wkst.Columns[colNo].Delete();
}
并这样称呼它:
i = 1;
while (i < colCount)
{
excelCol = excelCols[i] as Range;
excelCol.AutoFit();
if (excelSheet.Cells[1, i].Value2 == "Col2")
DeleteColumnIfEmpty(excelSheet, i);
}
我有一个 excel sheet 格式与下面的 table 类似,如果我知道列 header 文本 "Col2" 我怎么能然后只检查该列中的所有单元格是否为空,如果为空则删除整列?
*Col1 * Col2 * Col3*
********************
*Val * * Val *
*Val * * Val *
我想我需要 select 范围内的 header 并找到具有与相关字符串匹配的 header 的列的索引,我还需要使用 CountA 来计算非空单元格?我认为中间还有一个步骤缺少 select CountA 的列,如果有 0 个非空单元格,我需要删除。
我下面的工作代码打开工作sheet并调整列的大小:
excelApp = new Microsoft.Office.Interop.Excel.Application();
excelBooks = excelApp.Workbooks;
excelBook = excelBooks.Open("test.csv", 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);
excelSheet = excelBook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
excelCols = excelSheet.Columns;
i = 1;
while (i < colCount) {
excelCol = excelCols[i] as Microsoft.Office.Interop.Excel.Range;
excelCol.AutoFit();
}
//range for first row
excelRows = excelSheet.Rows;
excelRow = excelRows[1] as Microsoft.Office.Interop.Excel.Range;
有人可以帮忙解决这个问题吗,我试了很多次,但我不太确定如何从这里开始。
首先,将以下 using
指令添加到文件顶部:
using Microsoft.Office.Interop.Excel;
假设您的列 headers 在第 1 行,您可以使用以下方法:
static void DeleteColumnIfEmpty(Worksheet wkst, int colNo)
{
for (int i = 2; i <= wkst.UsedRange.Rows.Count; i++)
{
if (wkst.Cells[i, colNo].Value2 != null) return;
}
wkst.Columns[colNo].Delete();
}
并这样称呼它:
i = 1;
while (i < colCount)
{
excelCol = excelCols[i] as Range;
excelCol.AutoFit();
if (excelSheet.Cells[1, i].Value2 == "Col2")
DeleteColumnIfEmpty(excelSheet, i);
}