Protection of the formatting of a spreadsheet - excel-2003

I am creating an Expense Reimbursement spreasheet that will allow users to input their expenditures and the spreadsheet will automatically add all of the columns. I have protected the spreadsheet so that they can only enter information in unprotected cells. The problem I am having is: how do I protect the sheet so that when someone prints the form, they cannot change the print layout? (i.e. they should not be able to change the page layout, or change the margins, etc.) How can I protect the spreadsheet from someone printing it on legal paper, or putting it on 2 pages, etc?

There is, far as I can tell, no way to lock the layout... But how are you with VBA?
The Worksheets("SheetName").PageSetup object will allow you to specify all of the page setup properties, and if you were to put these specifications in the Workbook's Workbook_BeforePrint and Workbook_BeforeSave subroutines, Excel would 'reset' your specifications right before it printed (and saved), ensuring that your layout was honoured.

Related

How do i trace multiple XML elements with same name & without any id?

I am trying to scrape a website for financials of Indian companies as a side project & put it in Google Sheets using XPATH
Link: https://ticker.finology.in/company/AFFLE
I am able to extract data from elements that have a specific id like cash, net debt, etc. however I am stuck with extracting data for labels like Sales Growth.
tried
Copying the full xpath from console, //*[#id="mainContent_updAddRatios"]/div[13]/p/span - this works, however, i am reliable on the index of the div (13) and that may change for different companies, hence i am unable to automate it.
Please assist with a scalable solution
PS: I am a Product Manager with basic coding expertise as I was a developer few years ago.
At some point you need to "hardcode" something unless you have some other means of mapping the content of the page to your spreadsheet. In your example you appear to be targeting "Sales Growth" percentage. If you are not comfortable hardcoding the index of the div (13), you could identify it by the id of the "Sales Growth" label which is mainContent_lblSalesGrowthorCasa.
For example, change your
//*[#id="mainContent_updAddRatios"]/div[13]/p/span
to:
//*[#id = "mainContent_updAddRatios"]/div[.//span/#id = "mainContent_lblSalesGrowthorCasa"]/p/span
which is selecting the div based on the div containing a span with id="mainContent_lblSalesGrowthorCasa". Ultimately, whether you "hardcode" the exact index of the div or "hardcode" the ids of the nodes, you are still embedding assumptions regarding the structure of page.
Thanks #david, that helped.
Two questions
What if the structure of the page would change? Example: If the website decided to remove the p tag then would my sheet fail? How do we avoid failure in such cases?
Also, since every id is unique, the probability of that getting changed is lesser than the index being changed. Correct me, if I am wrong?
What do we do when the elements don't have an id like Profit Growth, RoE, RoCE etc

Google Sheet function to Split the Data Accordingly

I have a worksheet being fed by a Google Form. I want the responses on the Google Form to populate two fields in the next tab. The B column in the second tab is the one beyond my skillset. I have written out how the field should display, based on the form responses for reference. I also have used comments on the sheet to explain the rules for each field.
I know split function can be used but it wont adjust it. any possible solution.
Here the Sheet link
https://docs.google.com/spreadsheets/d/1ueKCNdcn1xmJHYtrzKKKkj_FSraRfpvJS4Oi3BHNUvk/edit?usp=sharing
I've added an answer on your sheet. Since the data is all delineated by semi-colons, this formula seems to match what you want.
=SPLIT('Import Data'!B1,";",0,0)
Let us know if it doesn't do what you want, or if this helps.
Updated: After checking with you, I realise that you want only some of the data split, and some kept concatenated. But since all of the data "fields" look the same, separated by semi-colons, and since there could be various numbers of fields in each response category, I don't think there is a simple logic that can tell where to split, and where to keep things like dress styles or sizes concatenated. So I understand that this is not your desired answer.

Conditional formatting based on multiple criteria

I don't know if what I wrote in the title is specific enough to what I'm looking for, anyway, I'll try and explain as much as possible here.
I have two sheets, one is the layout, the other is the database.
The layout is a layout of computers in an office, and in the database I have various information about those computers (e.g. manufacturer, processor, etc).
What I'm looking for is a way to change the colors of the cells in the layout sheet based on the data in the 'db' sheet.
This is the first sheet, where numbers are the ID's of the computers.
On the second sheet, I have more information about each number.
This is from the second sheet, the 'db' sheet.
What I'm trying to do here is change the colors of the cells in the first sheet based on information on the second sheet and based on the dropdown selected.
For example, in the pictures above, I have chosen 'computer' which needs to change the color of the cells based on the manufacturer given in the second sheet.
I would've posted a formula that I'm currently working on, but the problem is I'm very new to conditional formatting and currently am completely stumped on this problem.
Thanks in advance.
This might not be exactly what you're looking for but it's on the right path. I'm not sure if "Dell" and "HP" are supposed to be dynamic results of the data validation or? Either way...
=AND(VLOOKUP(C2:C,INDIRECT("Sheet2!A2:B"),1)=C2:C,VLOOKUP(C2:C,INDIRECT("Sheet2!A2:B"),2)="Dell",$D$3="computer")
and
=AND(VLOOKUP(C2:C,INDIRECT("Sheet2!A2:B"),1)=C2:C,VLOOKUP(C2:C,INDIRECT("Sheet2!A2:B"),2)="HP",$D$3="computer")
Be sure to reference C:K in the Conditional Formatting Rules. That way you can avoid having to repeat the process for each column.

Using CONCATENATE with Google forms and sheets

I have a survey going out with Google Forms, but to analyse the results, I would need to concatenate some cells. However, due to the nature of Google Forms, whenever a new response is recorded, a new row is added. I've read around, looking at different forums and tutorials, but can't seem to find anything that works.
Some of the places I've looked are:
concatenate column values for each row that gets added after google form submission
https://productforums.google.com/forum/#!topic/docs/0Os52U-0i1k
So what I would need help with is if it's possible to concatenate results from a Google Form without having to manually copy the formula in the cells whenever there are new responses. I've tried ArrayFormula, but I can't seem to get it to work. Any help would be much appreciated!
ArrayFormula(A2:A & B2:B) should do the trick.
Note that the formula will persist even if you put it directly at the end of the form and then add a new field.
It will just be shifted to the right, so you don't need to worry about taking care of that when you modify your form.
The CONCATENATE function is a Google spreadsheet function that combines two or more text strings into a single string. It appears in the dropdown menu for functions above cell A1, and when you select it, it places an =CONCATENATE()= formula in the selected cell.
Note that you may need to replace spaces with "&" if your text has spaces.
In order to perform this operation on Google Forms though, you will need to set up Form Embeds by making sure you have the input type of "google form embed." When embedded forms are enabled, there is no need for individual cells within a google sheet workbook with custom formulas next to each question result button as they're all being calculated.
You can find more info on CONCATENATE by referring to this.

How to auto populate specific Google Form fields, based on dropdown choice

I use Google Forms regularly at work, and I think they are awesome, especially since I am a total newbie with coding. With a few good plugins for Forms and Sheets, I am able to generate contracts, invoices, and so on very easily, based on document templates.
To keep it short, here is my request:
I have a form, where I input the customer's details, and upon submission, an addon generates a gdoc, based on a template. Al working great so far. My problem is that we are generating many different documents for a single customer, so it becomes a repetitive and very time-consuming task, considering that I have 15-20 different input fields for a customer, plus specific input fields for each different document.
The first input filed in my form is "Customer Name" and I have managed to create a dynamic dropdown list, that takes it's information from a specific column in a Google Sheet.
My request: how could I auto populate specific input fields in my Google Form, so that, based on my dropdown choice, the auto completed information will match the corresponding row present in the Google Sheet.
I have attached 2 images for easier understanding:
You can actually do this with a simple vlookup:
note: I also always wrap my functions with and if statement that checks if there is text in the first field, so try:
pretend that your dynamic customer name is in cell A1:
customer vat formula -
=IF(ISTEXT(A1),VLOOKUP(A1,'Parteneri'!A:C,2,FALSE),)
customer city formula -
=IF(ISTEXT(A1),VLOOKUP(A1,'Parteneri'!A:C,3,FALSE),)

Resources