The newest new old thing

Apologies to Raymond Chen:
Against my better judgement I rewrote the xll add-in library. Again.
Still learning all the new C++11/14/17 good bits. And trying to avoid the crazy things that seem to be slipping into the latest standards.
No disrespect to women, but I always feel like I’m giving birth every time I try this. The ancient C Excel SDK has its, um, personality. I continue to be floored by how expressive modern C++ has become.
The AddIn class now uses lambda expressions to Register and Unregister on xlAutoOpen and xlAutoClose.
You could probably save a few characters if you wrote this in python/ruby/perl/language du jour, except you can’t write this in those languages. It definitely takes more brain cells to come up with code this tight, but that is where the fun is.

13 thoughts on “The newest new old thing

  1. I was trying to use your old version of this and saw you’re working on a new version. I can open the project in the VS2015, but what do I need to do to install it so I can create Excel Add Ins using it?

    1. I just downloaded the project and started writing functions into the “test” part of the project. This compiles fine for me in VS2015, with nothing else seemingly needed

  2. I like the new version, there is some kind of elegance to the coding that is pleasing.
    What I can’t seem to do is get at values passed in as a range from excel to the xll. (most likely this is because I come from plain C in embedded micro controllers and I am missing things). Any pointers () would be appreciated. I dug around a lot of your related projects using the FP class and that I can do, but I was hoping to use a non contiguous range of cells as an input.

    1. Thanks, this is a labor of love for me. I only wish I had more time to add some more cool stuff I’ve been thinking about.

      It is possible to write functions that use a non contiguous range of cells as an input, but you will have two problems:
      1) Do you know how to select multiple range inputs in Excel?
      2) Do you understand the xltypeRef OPER(12)?
      Please don’t ask me to encourage you to do this.

      The FP(12) datatype gives you a pointer to a 2-d array of IEEE 64-bit doubles. No need to copy the array to any of your functions, just hand them the pointer. See, e.g.,

      The OPER(12) datatype gives you a pointer to an Excel cell or 2-d range of cells. Each cell is 24-bytes instead of 8-bytes, IIRC. Use this if you need booleans, (counted) string pointers, error types, etc.

      The old link has some documentation for both of these.

  3. Thanks for the detailed reply.
    I re-read Dalton’s section on opers and found some silliness where somewhere along the line I confused what I was registering and passing — if I choose XLL_LPOPER in the addin registration function and then XLOPER12 in the function definition then i get the reference passed as an xltypeMulti from which I readily can access the values, provided its a contiguous range (i had chosen XLL_LPXLOPER type U before at some point and that was giving me xltypeSRef which was the source of my grief)
    To simplify things i will deal with the data in Excel first to get it into nice arrays and take advantage of the FP(12) datatype.

  4. That will be simpler and more performant. I’ve never figured out a good way to ensure what users specify in AddIn as C arguments get type checked in the argument list to the actual call. LPOPERs get coerced to values by Excel. LPXLOPERs are references that you have to dig through.
    Don’t forget Excel is a functional language. One of the first and best at what Excel does.

  5. Hello,
    My name is Jennifer. I am trying to use your program to build an excel add-in. I am quite new to this thing. I managed to compile your code successfully and is wondering where to find resources to learn how to program for your xll library. Would you please give some suggestion?

    1. The shfb folder has some documentation. You need to install Sandcastle Help File Builder to build it.
      There are many xll projects in the github repository you can use as examples.
      What are you trying to implement?

      1. Okay. Thank you! I will install Sandcastle Help File Builder. I want to implement some functions that I can achieve with c++. I don’t have any in mind right now.

  6. Hello again, I have a question about how to use an array as input to build a sum function. I am trying to change the input to the sample code, the square function, of the xll12. However, nothing has worked for me. I was wondering what data type does the xll12 takes in for array operations. Also, would you please guide me to some documentation for the xll12 coding since I would like to build more complex things with it in the future.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s