Another "domain-specific mail merge" that I built was a tool to pull summary data out of the client financial records and populate specific fields in some off-the-shelf income tax software.
That was a terrible tool to write and maintain. The tax software's import feature didn't actually work correctly. I reached out to the vendor and the response was basically "Works for us", so doing it the right way wasn't an option.
Instead, I used VBA to blindly enter data into the program using SendKeys[0]. Maintaining the program was a case of tabbing through and counting the number of times I had to tab. Enter first name, tab, enter last name, tab three times, enter address line 1, etc. Next year when the forms in the tax software changed I'd have to add/remove tabs in the appropriate places, sometimes input stuff in a different order, etc.
As a program, it was horrible, horrible code. As a useful tool for the business, it was incredible. It saved a ton of time and the staff that used to do this by hand, in addition to doing actual work on the more complex files, were incredibly happy.
Overall, it was completely worth it.
[0] https://docs.microsoft.com/en-us/office/vba/language/referen...
Holy cow why didn't I know about this 6 months ago =|
VBA is something I have had to reluctantly learn. It's a horrid/ancient language. Sorry if someone gets offended at that but to someone who uses a lot of modern development languages/tools it's just very very difficult with near-zero "nice to haves"... you just end up taking this huge lib of code around with you with functions like "inArray" etc.
> As a program, it was horrible, horrible code. As a useful tool for the business, it was incredible.
That's something that's rough for us engineers but can be hedged with great documentation, both inline and and otherwise =)
You have data in a database, you flatten it into a non structured document, send it, and then the other end uses data entry to add it to a database. What should be the realm of EDI/CrystalReports/Blockchain take your pick, instead everyone wants to interchange data in the pretty human readable format, as opposed to just rendering it that way for humans while also communicating the raw structured data.
We had a whole slew of standard letters that we'd send out, most of the time requests would go to the typing pool (yes, this was a thing) that were basically "Do letter ABC for client XYZ", where letter ABC was a standard thing that always went to the same recipient.
I built a screen in our system that let you tell it to request a letter (only the simple letters, obviously), it would pull the relevant data out of the client file and write the request out as an XML file. On the other side of things, a VB6 program would watch a folder for those XML files to appear and go through OLE Automation (as it was called back then) to make Word fill in the letter, print it, print an envelope, and save the result in the client's folder.
This kind of thing is an absolutely incredible time saver.