SSIS export to Excel template - VLOOKUP - excel

A client has an exact template that must be used. Due to the formatting I cannot insert the data directly into the template via SSIS.
Idea:
Run SSIS as a schedule. It copies the template and populates the information.
I used a "reference" sheet in the same workbook to push all the necessary data to as I could not place it directly in the required template.
VLOOKUPs to the "reference" sheet are used to correctly set the data in the template.
Issue: The VLOOKUP does not automatically refresh the data. When I open the workbook the values are the same. If I change a cell in the reference table, the data updates in the VLOOKUPs.
Solution: What I need is a way to set the data in SSIS, and have the VLOOKUPs automatically re-check the data when the Excel workbook is opened.

Resolved
I have resolved the issue with the following
Issue
The VLOOKUPs will not update on open without manually opening/changing an impacted cell
=VLOOKUP(A1,Reference!$A2:$B6, 2, FALSE)
Solution Found
A bit of a hack, but in the Reference worksheet:
Added a "Format" row to the template
In the VLOOKUP reference column (Reference!$A2) place a formula that will be updated (e.g. "=TODAY()") in the "Format" row
Now whenever the workbook is opened, Reference!$A$2 is updated to today's date. This triggers the VLOOKUPs in the template to update because a value changed in the reference column. The full process is:
Template.xlsx (2 sheets: TemplateResults, and Reference)
SSIS - Copies Template.xlsx for current run
SSIS - Pulls data and places in Template.xlsx - Reference
Open CopiedTemplate.xlsx: Reference!$A$2 updates itself to current date. Triggers VLOOKUPs in TemplateResults to update themselves

Related

Excel #ref error: Occurs when data is refreshed

I have made a connection in excel to another excel workbook, using the native functionality found under the data tab in excel. I imported the data into my "Main" excel workbook from the "Other" workbook by Selecting Data->existing connections and then opening the relevant sheet. This allowed me to link the data from my other workbook to my Main workbook.
My issue is when the data in the Other workbook is changed i received a #ref error in my Main workbook. The formulas i use on the imported data are pasted in a separate sheet (i tried pasting it next to the imported data as well). Note: i paste the formulas from row 1 - 500 for the respective column, so that when the data is imported the formula automatically populates the cell with the correct value. When i refresh the data (i.e when data has been changed in the Other workbook) It seems as the formulas i have copied down do not reference the correct cell anymore.
I have tried using an indirect but to no success.
This is what the formula i use looks like
=IF(INDIRECT("A"&ROW(#REF!))<>"",VLOOKUP(INDIRECT("A"&ROW(#REF!)),'Safex Codes'!$A$1:$H$1000,8,0),"")
However when the data is refreshed "SOME" of the rows in the column the formula is in return this formula
=IF(INDIRECT("A"&ROW(#REF!))<>"",VLOOKUP(INDIRECT("A"&ROW(#REF!)),'Safex Codes'!$A$1:$H$1000,8,0),"")
This occurs everytime i refresh the data. What is strange is that at the end of my data, hence the last time the formula is being called, the referencing to the correct row is completely off.
For example in row 28 i would expect the above formula to reference a28, however i receive
=IF(INDIRECT("A"&ROW(A24))<>"",VLOOKUP(INDIRECT("A"&ROW(A24))
I'll bet that you're having the same issue I was. When the number of rows in the data range changes, the unused cells previously populated with data are deleted. The formulas that referenced those deleted cells no longer have references to them because they've been deleted (hence the #REF errors).
You can change Excel's behavior with respect to handling new or unused rows using the Properties menu on the Data tab.
In that menu, take a look at the section labeled "If the number of rows in the data range changes upon refresh." I'm guessing you have the first option checked. Try the third option.

Generate an Excel file from a template

Regarding creating an automatic Excel sheet from an Excel template for a user that uses data from the database.
Essentially, I'm looking for a way to fill out the fields in this Excel sheet (and have the graph automatically change) and for the Excel sheet to pop up as a new file for the user (i.e. the template would stay untouched). You'll see in the Excel sheet that there are a number of cells that need to be filled from Access. I have a query in Access PER CELL that needs to be filled.
So, essentially I have 14 queries and I need the results of those queries to appear in the cells of a local version of an Excel template.
I've found this but I'm having troubles connecting the dots to my actual task that needs to be done.

In Excel, how do I reference a local worksheet within a template?

I am creating my own template which I need to use data from a worksheet called Schedules. The template contains 3 sheets, none of which are the Schedules sheet. This template will only be used in workbooks where the Schedules sheet already exists.
My question is, how do I reference a local worksheet which isn't in the template?
Whenever I create the template I reference the Schedules sheet but it asks for a file destination. How can I force it to look for a local sheet, even though the sheet won't exist until the template is actually used?
Depending on how complex your formulas, this could get messy pretty quickly, but one option would be to use the INDIRECT formula.
Some examples are below:
Gives you the value of A1 on the Schedules sheet
=INDIRECT("Schedules!"&"A1")
Looks up the ID '5' in the range A1:C20 in the Schedules sheet and returns the corresponding value in column B
=VLOOKUP(5,INDIRECT("Schedules!"&"A1:C20"),2,0)
Multiplies two values on the Schedules sheet
=INDIRECT("Schedules!"&"A1")*INDIRECT("Schedules!"&"A2")
Once you get your formulas working you can move your templates to the workbook that has the Schedules. All of your formulas will update with appropriate values, and for the record, calculations should be set to automatic.

Excel Table Data Connection Removes Cell Reference Upon Refresh

I have a Data Connection within my Excel Workbook (2007) which references a table within another Excel workbook. I have a cell that is referencing a date value within the last column header of the table. Each time the external workbook is updated and this date value changes, the cell reference in my workbook is broken and the cell shows #REF!
In case it helps I'm using a Database Query.
Connection string: {Replaced Path and Workbook Name}
DBQ=PATH\WORKBOOKNAME.xlsx;DefaultDir=PATH;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DriverId=1046;FIL=excel 12.0;MaxBufferSize=2048;MaxScanRows=8;PageTimeout=5;ReadOnly=1;SafeTransactions=0;Threads=3;UID=admin;UserCommitSync=Yes;
Command text: {Replaced Path}
SELECT * FROM `PATH\WORKBOOKNAME.xlsx`.`Main$` `Main$` ORDER BY `Main$`.IP
This is what the cell value in Column H looks like before the refresh:
This is what the cell value in Column H looks like after the refresh:
This last column header of this table contains a date value which will change each time the source workbook is updated (Volatile Date in source workbook). Technically this date field is not part of the other workbook table. However, the data connection is still pulling it and including it into the table on the main worksheet. I would not be able to modify the other workbook table and format without changing several other things due to other dependencies. I'm not sure of any other way to really reference a dynamic table header or correctly reference this cell so that the reference is not broken...
I'd like to do this within the cell formula without having to use a Macro if at all possible.
Any help is greatly appreciated. Thank You.
I guess the solution was as simple as using Indirect...
=INDIRECT("G1")
The header of the table should not change if you consider it used as a database field name. I can think a workaround as you directly give a range name to the date column in source book, for example, "Dates". Then in your other book, just make cells point to this range in source book, ie. make cells=[sourcebookname.xlsx]!Dates

XSSF saving workbook

I am using XSSF to create a workbook and continually getting this error:
Excel found unreadable content in 'thefile'.xlsx. Do you want to recover the contents of this workbook? If you trust the source of the workbook click Yes.
Excel then obligingly recovers it by removing all of the data and gives the detail error report:
Removed Records: Cell information from /xl/worksheets/sheet1.xml part
I am following these principles:
Ensure the row is created and not null.
Ensure the cell is created and not null.
Ensure the cell is the correct type.
Write to cell.
Is there something I am missing, eg is it permissable to have only certain cells written to in a row eg:
|null|null|write something here|null|null|
and the same with rows:
row with content
null
row with content
or do I need to ensure the all rows and columns are filled blank through the ranges used.
This is a complete mystery.

Resources