使用EPPLUS查找和替换所有字符串

时间:2019-05-26 09:10:57

标签: c# epplus

如何使用EPPLUS查找和替换工作表中的所有字符串?

在Excel宏上就像这样:

Cells.Replace What:="k", Replacement:="w", LookAt:=xlPart, SearchOrder _
    :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False

2 个答案:

答案 0 :(得分:0)

EPPLus中搜索和替换单元格值的快速方法是在Linq中使用EEPlus。我为您写了一个简单的例子。我的电子表格几乎有10列和1157行,而且搜索和替换值用了不到一秒钟的时间。

    var valueToSearch = "Foo";
    var valueToReplace = "Bar";
    var sheetName = "Sheet1";
    var filePath = @"d:\foo-bar.xlsx";

    using (var excel = new ExcelPackage(new System.IO.FileInfo(filePath)))
    {
        var ws = excel.Workbook.Worksheets[sheetName];

        // search in all cells
        // https://github.com/JanKallman/EPPlus/wiki/Addressing-a-worksheet
        var query = from cell in ws.Cells["A:XFD"] 
                    where cell.Value?.ToString().Contains(valueToSearch) == true
                    select cell;

        foreach(var cell in query)
        {
            cell.Value = cell.Value.ToString().Replace(valueToSearch, valueToReplace);
        }

        excel.Save();
    }

答案 1 :(得分:0)

我用你的例子提出了一个函数。我一次又一次地调用此函数,以便在我的excel模板中找到一些唯一的引用字符串,并将它们替换为从表中检索的值。但是我注意到函数每次都会出错,提示“对象引用未设置为对象实例”。这是我的功能:不知道怎么了。请您指教。

    Private Function FindAndReplaceTextInExcel_EPPlus(oWS As ExcelWorksheet, strStringToFind As String, strStringToAdd As Object) As Boolean
        Try
            '
            Dim oExcelRangeBase = From cell In oWS.Cells("A:XFD") Where cell.Value.ToString().ToUpperInvariant.Equals(strStringToFind.ToUpperInvariant) = True Select cell

            If Not IsNothing(oExcelRangeBase) Then
                For Each cell In oExcelRangeBase
' I tried both options below but in the loop the function gives error.
                    cell.Value = strStringToAdd.ToString  'cell.Value.ToString.Replace(strStringToFind, strStringToAdd)
                    ' MsgBox(cell.Address.ToString)
                    FindAndReplaceTextInExcel_EPPlus = True
                    Exit For
                Next

            End If

        Catch ex As Exception
            '  MsgBox(GetLineNumber(ex) & vbCrLf & ex.Message)

        End Try
        Return FindAndReplaceTextInExcel_EPPlus
    End Function