从excel文件C#中查找并删除usedRange中的空单元格

时间:2016-12-13 15:37:00

标签: c# interop

我想找一个删除任何空的单元格(不包含值或样式)。我尝试使用Excel.Interop尝试这样做。我不完全确定如何解决这个问题,但我试过这个。

        Excel.Application xlApp;
        Excel.Workbook xlWorkBook;
        Excel.Worksheet xlWorkSheet;
        Excel.Range range;

        string str;


        xlApp = new Excel.Application();
        xlWorkBook = xlApp.Workbooks.Open(@"C:\Users\Craig\Desktop\testCell.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
        xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1);

        range = xlWorkSheet.UsedRange;

        if ((((Excel.Range)xlWorkSheet.Cells[range]).Value2.ToString() != String.Empty))
        {
            Console.WriteLine("No empty cells found");
        }
        else
            Console.WriteLine("Found empty cells");

但是我在运行时说The parameter is incorrect. (Exception from HRESULT: 0x80070057 (E_INVALIDARG))在我的if语句上。关于我的问题的任何想法,或者我是否正确的方式?我已经进入我的临时文件并删除它们,我删除了我的bin文件夹的内容

1 个答案:

答案 0 :(得分:0)

我猜你的错误可能来自这条线:

if ((((Excel.Range)xlWorkSheet.Cells[range]).Value2.ToString() != String.Empty))

您正在检查WHOLE范围是否等于空字符串?

如果您只想删除空行和列,我之前已经回答过,请查看以下链接:

Remove Empty rows and Columns From Excel Files Faster using Interop

以上链接是为了加快使用范围内的循环,以删除空行和列。但是,在我的回答中有一个较低的部分循环使用已使用范围的行和列来删除空行和空列。如果要删除单个空单元格,可以修改代码以循环遍历每个列,并在需要时删除空单元格。希望这会有所帮助。