我已经为此工作了2天,我有包含类型和数字的EXCEL文件,我需要获得特定类型的所有数字,

enter image description here

我试过了,但对我不起作用:

public void ReadExcel(string SelectedType)
{
    string excelName = "";            
    OpenFileDialog dialogRead = new OpenFileDialog();
    dialogRead.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
    dialogRead.ShowDialog();
    excelName = dialogRead.FileName;
    Application excelApp = new Application();
    Workbook workbook = excelApp.Workbooks.Open(excelName);
    Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook
        .Sheets["INVENTORY "];
    FilterByCellValue(worksheet, "V", SelectedType);
    string newFilePath = "FilteredExcelFile.xlsx";
    workbook.SaveAs(newFilePath);
    excelApp.Quit();
}
static void FilterByCellValue(Microsoft.Office.Interop.Excel.Worksheet worksheet, string column, string cellValue)
{
    Range dataRange = worksheet.UsedRange;
    Range filterColumn = (Range)dataRange.Columns[column];

    filterColumn.AutoFilter(1, cellValue, XlAutoFilterOperator.xlFilterValues, Type.Missing, true);
}

我希望得到 Select 类型的所有数字,但我得到了这个异常_AutoFilter method of Range class failed.

推荐答案

正确过滤范围.这是我为您创建的一个示例.

using Excel = Microsoft.Office.Interop.Excel;

namespace WinFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
           // Hardcoded Excel filename. Change as applicbale
           string excelName = "C:\\Temp\\Book1.xlsx";

           Excel.Application excelApp;
           Excel.Workbook xlWorkBook;
           Excel.Worksheet xlWorkSheet;
            
           excelApp = new Excel.Application{Visible = true};
           xlWorkBook = excelApp.Workbooks.Open(excelName);

           // Change the name of the sheet here
           xlWorkSheet = xlWorkBook.Sheets["Sheet1"];

           // I have hardcoded the filter value. change as applicable
           string SelectedType = "4";

            FilterByCellValue(xlWorkSheet, "V", SelectedType);
        }

        static void FilterByCellValue(Excel.Worksheet worksheet, string column, string cellValue)
        {
            object misValue = System.Reflection.Missing.Value;

            Excel.Range dataRange = worksheet.UsedRange;
            
            // Get the column number where you want to filter
            int ColNumber = worksheet.Range[column + 1].Column;

            // Filter the data range
            dataRange.AutoFilter2(ColNumber, cellValue, Excel.XlAutoFilterOperator.xlFilterValues, misValue, true);
        }
    }
}

Screenshot

Before

enter image description here

After

enter image description here

Csharp相关问答推荐

当MD5被废弃时,如何在Blazor WASM中使用它?

在C# 11之前, struct 中的每个字段都必须显式分配?不能繁殖

Blazor:用参数创建根路径

当Visual Studio处于升级管理模式时,无法安装Torch运行时

如何使嵌套for-loop更高效?

Blazor:类型或命名空间名称Components在命名空间中不存在''

只有第一个LINQ.Count()语句有效

如何使用NumberFormatInfo

如何捕获对ASP.NET核心应用程序的所有请求并将其发送到一个页面

BlockingCollection T引发意外InvalidOperationException

为什么AggregateException的Catch块不足以处理取消?

有没有更好的方法来在CosmosDB上插入非id?

如何在同一成员上组合[JsonPropertyName]和[ObservableProperty]?

System.NotSupportdException:流不支持读取

如何在使用属性 Select 器时判断是否可以为空

是否可以从IQueryable T中获取一个IdentyEntry T>

Foreach非常慢的C#

try 创建一个C#程序,该程序使用自动实现的属性、覆盖ToString()并使用子类

使用免费的DotNet库从Azure函数向Azure文件共享上的现有Excel文件追加行

将文本从剪贴板粘贴到RichTextBox时,新文本不会在RichTextBox ForeColor中着色