Copy link to clipboard
Copied
I'm building a template for a report I'm trying to automate. I have a series of numbers that will be pulled in via data merge, and I'd like to automate a bar-type graph that is based off those numbers.
basically when the number 44% is pulled in it would adjust the width of the colored bar that is anchored next to it to 44 pixels or it would take a full size bar and reduce the width to 44%?
I will have maybe hundreds of these instances so it would be great to be able to link them or maybe a script where the object style is depended on parapgraph style that appears before it?
I'm open to any ideas that I can play around with!
You can have every group named as like a library item. Something like: "bar-graph". You name stuff in the layers library.
Then you could do something like:
var gs = app.activeDocument.groups;
for (var i = 0; i < gs.length; i++) {
if (gs[i].name == "bar-chart") {
var numFrame = gs[i].textFrames.itemByName("num1");
var containingBar = numFrame.rectangles.itemByName("bar");
rejiggerBar(numFrame, containingBar);
}
}
Your rejiggerBar function could parse the i
...it really is neat! i enjoy figuring out a challenge and making things super efficient.
In case someone shows up on this thred and wants to know more ...
It includes 100 conditional character styles and 100 stroke styles 1-100 for each. my character styles are based off the first so if those have to change its only 1 style i'm adjusting.
All four of the entries below use the same 1 paragraph style with some nested and grep styles built in and. The bars are built into the style.
Copy link to clipboard
Copied
Definitely possible via script. Basically you could group each object, then for each group, reach the number value and adjust the rectangle value's bounds position. Not really a trivial task however. Have you ever scripted before?
Copy link to clipboard
Copied
I have but still pretty beginner, I've been able to write some and then study others to find answers but a lot of the time it still needs a lot of tweaking.
Copy link to clipboard
Copied
Within my main text frame I have as follows:
for the script, do I search for the object style? do i need an object style for the grouped items? sometimes the bar is in the 2nd or 3rd colomn of my text frame, and I want the pixel length to match the data its grouped. I can try and piece together some language but I'm not sure exactly which route to take it.
Copy link to clipboard
Copied
You can have every group named as like a library item. Something like: "bar-graph". You name stuff in the layers library.
Then you could do something like:
var gs = app.activeDocument.groups;
for (var i = 0; i < gs.length; i++) {
if (gs[i].name == "bar-chart") {
var numFrame = gs[i].textFrames.itemByName("num1");
var containingBar = numFrame.rectangles.itemByName("bar");
rejiggerBar(numFrame, containingBar);
}
}
Your rejiggerBar function could parse the integer of the text frame and resize the containing bar to spec. But that's where the magic comes in. If your library has two bars, you could name the num1 and num2 and pass both sets to a rejiggerBar function.
Lots of ways to slice it, and it's not trivial. Good luck!
Copy link to clipboard
Copied
Thank you so much! I will absolutely be trying this and putting it to good use!
I actually did figure out a way to accomplish what I needed using grep in my paragraph style with different stroke styles and character styles and it works automatically when the numbers are changed which will hopefully avoid issues since I'll have possibly a 100 entries.
Copy link to clipboard
Copied
Sounds like a clever solution as well.
Copy link to clipboard
Copied
it really is neat! i enjoy figuring out a challenge and making things super efficient.
In case someone shows up on this thred and wants to know more ...
It includes 100 conditional character styles and 100 stroke styles 1-100 for each. my character styles are based off the first so if those have to change its only 1 style i'm adjusting.
All four of the entries below use the same 1 paragraph style with some nested and grep styles built in and. The bars are built into the style.
For example: the 10% activated the 10pt value bar and the color for both changed to red because ‘Female’ was typed; the 5% activated the 5pt value bar and the color for both changed to teal because ‘Male’ was typed.
hope this helps someone!
Copy link to clipboard
Copied
As I worked with this more ... I found it even more efficient to have 100 thin spaces with a character style I use to change the width of the bars. then use the below grep style to have a value bar character style assigning the length ... and then I dont need the 100 character styles or the 100 stroke styles 🙂
(?<=^1%\t)~|{1}|(?<=^2%\t)~|{2}|(?<=^3%\t)~|{3}|(?<=^4%\t)~|{4}|(?<=^5%\t)~|{5}|(?<=^6%\t)~|{6}|(?<=^7%\t)~|{7}|(?<=^8%\t)~|{8}|(?<=^9%\t)~|{9}|(?<=^10%\t)~|{10}|(?<=11%\t)~|{11}|(?<=12%\t)~|{12}|(?<=13%\t)~|{13}|(?<=14%\t)~|{14}|(?<=15%\t)~|{15}|(?<=16%\t)~|{16}|(?<=17%\t)~|{17}|(?<=18%\t)~|{18}|(?<=19%\t)~|{19}|(?<=20%\t)~|{20}|(?<=21%\t)~|{21}|(?<=22%\t)~|{22}|(?<=23%\t)~|{23}|(?<=24%\t)~|{24}|(?<=25%\t)~|{25}|(?<=26%\t)~|{26}|(?<=27%\t)~|{27}|(?<=28%\t)~|{28}|(?<=29%\t)~|{29}|(?<=30%\t)~|{30}|(?<=31%\t)~|{31}|(?<=32%\t)~|{32}|(?<=33%\t)~|{33}|(?<=34%\t)~|{34}|(?<=35%\t)~|{35}|(?<=36%\t)~|{36}|(?<=37%\t)~|{37}|(?<=38%\t)~|{38}|(?<=39%\t)~|{39}|(?<=40%\t)~|{40}|(?<=41%\t)~|{41}|(?<=42%\t)~|{42}|(?<=43%\t)~|{43}|(?<=44%\t)~|{44}|(?<=45%\t)~|{45}|(?<=46%\t)~|{46}|(?<=47%\t)~|{47}|(?<=48%\t)~|{48}|(?<=49%\t)~|{49}|(?<=50%\t)~|{50}|(?<=51%\t)~|{51}|(?<=52%\t)~|{52}|(?<=53%\t)~|{53}|(?<=54%\t)~|{54}|(?<=55%\t)~|{55}|(?<=56%\t)~|{56}|(?<=57%\t)~|{57}|(?<=58%\t)~|{58}|(?<=59%\t)~|{59}|(?<=60%\t)~|{60}|(?<=61%\t)~|{61}|(?<=62%\t)~|{62}|(?<=3%\t)~|{63}|(?<=64%\t)~|{64}|(?<=65%\t)~|{65}|(?<=66%\t)~|{66}|(?<=67%\t)~|{67}|(?<=68%\t)~|{68}|(?<=69%\t)~|{69}|(?<=70%\t)~|{70}|(?<=71%\t)~|{71}|(?<=72%\t)~|{72}|(?<=73%\t)~|{73}|(?<=74%\t)~|{74}|(?<=75%\t)~|{75}|(?<=76%\t)~|{76}|(?<=77%\t)~|{77}|(?<=78%\t)~|{78}|(?<=79%\t)~|{79}|(?<=80%\t)~|{80}|(?<=81%\t)~|{81}|(?<=82%\t)~|{82}|(?<=83%\t)~|{83}|(?<=84%\t)~|{84}|(?<=85%\t)~|{85}|(?<=86%\t)~|{86}|(?<=87%\t)~|{87}|(?<=88%\t)~|{88}|(?<=89%\t)~|{89}|(?<=90%\t)~|{90}|(?<=91%\t)~|{91}|(?<=92%\t)~|{92}|(?<=93%\t)~|{93}|(?<=94%\t)~|{94}|(?<=95%\t)~|{95}|(?<=96%\t)~|{96}|(?<=97%\t)~|{97}|(?<=98%\t)~|{98}|(?<=99%\t)~|{99}|(?<=100%\t)~|{100}