http://www.perlmonks.org?node_id=999339


in reply to (( Resolved )) Search Entire Excel Workbook For Text

This seems to me to be an ideal application of XPath expressions, especially since you say that “E-H have a different XML template to follow.”   (If there are two variations to deal with now, one day there will be three and then four.)   With this approach, the expressions define what you are looking for, and it becomes XPath’s job to find it.   This will probably very-considerably simplify your logic overall, because the structure of your program is no longer matched to that of the file, and does not change as the files inevitably do.   All you need is an expression, perhaps in a list of them, that will succeed for a particular file.   (XML::LibXML is my recommendation but not the only choice.)   Notice also that the structure of the expression does not have to consider the entire structure of the surrounding file, either:   “tell me what you’re looking for, and I can find it, wherever it is.”

Another thread, today, mentioned XML::XSH, which seems to include a shell for applying XPath expressions interactively, among other features.   I haven’t (yet!) looked into that, but I want to include a link to it here anyhow.

  • Comment on Re: Search Entire Excel Workbook For Text

Replies are listed 'Best First'.
Re^2: Search Entire Excel Workbook For Text
by ImJustAFriend (Scribe) on Oct 16, 2012 at 15:29 UTC

    So, I am not familiar with XPath. I have been looking at this since I read your post, and it seems XPath is used to read XML, not Excel. Am I seeing this correctly?

    Thank you!!

    ImJustAFriend

      You're mostly correct. Most of your post was talking about XML, which I think could confuse folks about what you're needing help with: XML or Excel.

      What OS are you on? If you're on Windows, do you have Excel installed and available for use? Which Excel version is the file that you're using?

      • As for Excel file type, there's the older .xls version and the newer .xlsx type. Very different structures.
      • From non-Windows OSes and Windows without Excel, you'll probably be interested in Spreadsheet::ParseExcel for the older .xls file type and Spreadsheet::XLSX for the newer .xls.
      • From a Windows system with Excel, I personally would use Win32::OLE to control Excel to access the Excel file.
      • Also, with the .xlsx file type, there's another route to go. I believe that's just a compressed XML file. That means that you can uncompress it and then do XML parsing. If you go that route, then sundialsvc4's response about using XPath type modules for XML parsing now becomes very applicable.

        Thank you for your post and info, dasgar. My sincere apologies for the misleading post, to you and to sundialsvc4.

        I need help with Excel, not the XML. I am looking for a way to search for a particular string within an Excel spreadsheet (say "ce0_ipaddress") in a workbook, hopefully with results like "found ce0_ipaddress in worksheet 'Server1 IP Info' in column 0 of row 35". Is that even possible?

        In answer to your questions:
        OS: Windows XP
        Excel: I have Office 2007 installed and ready
        File format: .xls file, not .xlsx

        Thanks again!!

        ImJustAFriend