Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • World
  • Users
  • Groups
Skins
  • Light
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
Code Project
  1. Home
  2. General Programming
  3. C / C++ / MFC
  4. Excel Automation - Please help ...

Excel Automation - Please help ...

Scheduled Pinned Locked Moved C / C++ / MFC
questiontestingtoolshelp
17 Posts 6 Posters 0 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • G GuyM

    Hi all, In my application I need to read/write values to/from certain cells in an excel sheet. I've imported the Microsoft Excel 11.0 Object Library and added all the required interfaces (I think). My question is how do I open an existing XLS file and how do I get or set values from a certain cell? Thanks in advance, Guy.

    D Offline
    D Offline
    David Crow
    wrote on last edited by
    #8

    GuyM wrote:

    My question is how do I open an existing XLS file...

    if (app.CreateDispatch("Excel.Application") == TRUE)
    {
    app.SetVisible(TRUE);

    Workbooks books = app.GetWorkbooks();
    
    \_Workbook book = books.Open("C:\\\\Book1.xls",
                                 vtOptional, vtOptional, vtOptional,
                                 vtOptional, vtOptional, vtOptional,
                                 vtOptional, vtOptional, vtOptional,
                                 vtOptional, vtOptional, vtOptional);
    ...
    

    }


    "A good athlete is the result of a good and worthy opponent." - David Crow

    "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

    G 1 Reply Last reply
    0
    • D David Crow

      GuyM wrote:

      My question is how do I open an existing XLS file...

      if (app.CreateDispatch("Excel.Application") == TRUE)
      {
      app.SetVisible(TRUE);

      Workbooks books = app.GetWorkbooks();
      
      \_Workbook book = books.Open("C:\\\\Book1.xls",
                                   vtOptional, vtOptional, vtOptional,
                                   vtOptional, vtOptional, vtOptional,
                                   vtOptional, vtOptional, vtOptional,
                                   vtOptional, vtOptional, vtOptional);
      ...
      

      }


      "A good athlete is the result of a good and worthy opponent." - David Crow

      "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

      G Offline
      G Offline
      GuyM
      wrote on last edited by
      #9

      Great - it worked !! Thanks !! Now just one more thing ...how do I get/set the value a certain cell (for example A1).

      D 1 Reply Last reply
      0
      • G GuyM

        This is the link to the example: http://support.microsoft.com/kb/308407[^] As you can see there, the example doesn't open an existing excel file but creates a new (unnamed) one. Second, is uses COleSafeArray in order to access (read/write) an entire range of cells, where I need to access only single cells ... Thanks for your help ... :cool:

        R Offline
        R Offline
        Roger Stoltz
        wrote on last edited by
        #10

        Before you continue you have to be aware that Excel deals with containers. This means that when you launch Excel with CreateDispatch or similar, the next step is usually to get an interface for the WorkBook collection/container called WorkBooks. The same goes for the WorkSheet objects in the WorkSheets collection/container and so on. Once you've got hold of the WorkBooks interface, you call WorkBooks::Open(...) in order to open an existing document, a WorkBook. Then you'll get a WorkBook interface to be able to access the document. When the WorkBook has been opened, you have to choose which WorkSheet you want to use with WorkBook::get_WorkSheets() and later WorkSheets::get_Item(...). For each cell you want to read or write, you have to select a "Range". The example shows this. Regarding the fact that you don't want to use a SafeArray to write the data, I think you can give a VARIANT as argument to Range::put_Value() with a single value and the type set to e.g. VT_I4 for a 32-bit integer.


        "It's supposed to be hard, otherwise anybody could do it!" - selfquote
        "High speed never compensates for wrong direction!" - unknown

        1 Reply Last reply
        0
        • G GuyM

          Great - it worked !! Thanks !! Now just one more thing ...how do I get/set the value a certain cell (for example A1).

          D Offline
          D Offline
          David Crow
          wrote on last edited by
          #11

          GuyM wrote:

          ...how do I set the value a certain cell (for example A1).

          Worksheets sheets = book.GetSheets();

          _Worksheet sheet = sheets.GetItem(COleVariant((short) 1));

          Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));

          range.SetValue(COleVariant("12345.6"));


          "A good athlete is the result of a good and worthy opponent." - David Crow

          "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

          H 1 Reply Last reply
          0
          • D David Crow

            GuyM wrote:

            ...how do I set the value a certain cell (for example A1).

            Worksheets sheets = book.GetSheets();

            _Worksheet sheet = sheets.GetItem(COleVariant((short) 1));

            Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));

            range.SetValue(COleVariant("12345.6"));


            "A good athlete is the result of a good and worthy opponent." - David Crow

            "To have a respect for ourselves guides our morals; to have deference for others governs our manners." - Laurence Sterne

            H Offline
            H Offline
            hellogany
            wrote on last edited by
            #12

            HI i want to set a particular cell to RED color ?? and also while quittin the application, the excel file need to be saved....

            D 1 Reply Last reply
            0
            • H hellogany

              HI i want to set a particular cell to RED color ?? and also while quittin the application, the excel file need to be saved....

              D Offline
              D Offline
              David Crow
              wrote on last edited by
              #13

              hellogany wrote:

              HI i want to set a particular cell to RED color ??

              Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));
              Interior interior = range.GetInterior();
              interior.SetColorIndex(COleVariant(3L));

              hellogany wrote:

              and also while quittin the application, the excel file need to be saved....

              So you might want to call Save() or SaveAs().

              "Love people and use things, not love things and use people." - Unknown

              "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

              H T 2 Replies Last reply
              0
              • D David Crow

                hellogany wrote:

                HI i want to set a particular cell to RED color ??

                Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));
                Interior interior = range.GetInterior();
                interior.SetColorIndex(COleVariant(3L));

                hellogany wrote:

                and also while quittin the application, the excel file need to be saved....

                So you might want to call Save() or SaveAs().

                "Love people and use things, not love things and use people." - Unknown

                "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                H Offline
                H Offline
                hellogany
                wrote on last edited by
                #14

                thanks for the reply. i have to find a value in the excel cell and should replace a new value in that cell Can u help me on this issue? gany

                D 1 Reply Last reply
                0
                • H hellogany

                  thanks for the reply. i have to find a value in the excel cell and should replace a new value in that cell Can u help me on this issue? gany

                  D Offline
                  D Offline
                  David Crow
                  wrote on last edited by
                  #15

                  hellogany wrote:

                  i have to find a value in the excel cell...

                  Look at the Range::Find() method.

                  "Love people and use things, not love things and use people." - Unknown

                  "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                  1 Reply Last reply
                  0
                  • D David Crow

                    hellogany wrote:

                    HI i want to set a particular cell to RED color ??

                    Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));
                    Interior interior = range.GetInterior();
                    interior.SetColorIndex(COleVariant(3L));

                    hellogany wrote:

                    and also while quittin the application, the excel file need to be saved....

                    So you might want to call Save() or SaveAs().

                    "Love people and use things, not love things and use people." - Unknown

                    "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                    T Offline
                    T Offline
                    thready
                    wrote on last edited by
                    #16

                    DavidCrow wrote:

                    Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));Interior interior = range.GetInterior();interior.SetColorIndex(COleVariant(3L));

                    I've been looking all over for how to change the color - thanks to you it works - but just a simple question- Why is 3L = red? How does this color index thing work? Is there a way to use RGB with the 3 params to get any color? Thank you again! Mike

                    D 1 Reply Last reply
                    0
                    • T thready

                      DavidCrow wrote:

                      Range range = sheet.GetRange(COleVariant("A1"), COleVariant("A1"));Interior interior = range.GetInterior();interior.SetColorIndex(COleVariant(3L));

                      I've been looking all over for how to change the color - thanks to you it works - but just a simple question- Why is 3L = red? How does this color index thing work? Is there a way to use RGB with the 3 params to get any color? Thank you again! Mike

                      D Offline
                      D Offline
                      David Crow
                      wrote on last edited by
                      #17

                      thready wrote:

                      Why is 3L = red?

                      Because that's what the designer of that type library decided.

                      thready wrote:

                      How does this color index thing work?

                      I'm not sure what you are asking here. Just use the OLE/COM Object Viewer to find out the other values.

                      "Love people and use things, not love things and use people." - Unknown

                      "The brick walls are there for a reason...to stop the people who don't want it badly enough." - Randy Pausch

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Categories
                      • Recent
                      • Tags
                      • Popular
                      • World
                      • Users
                      • Groups