Database Error: Unable to connect to the database joomla - joomla

im trying to set up a jommla site on wampserwer and i get a error
Database Error: Unable to connect to the database joomla
this is my first round with joomla and im not quite sure where is the problem
can you please give me some advice
i found in google some advice and i run a query in database :
SHOW PROCESSLIST;
and i get
5 |
root |
localhost:52664 |
mauriced_azurproductionvideo |
Query
0
init
SHOW PROCESSLIST
mayby it is a wrong port number ?
this is my configuration file:
<?php
class JConfig {
var $offline = '0';
var $editor = 'tinymce';
var $list_limit = '20';
var $helpurl = 'http://help.joomla.org';
var $debug = '0';
var $debug_lang = '0';
var $sef = '0';
var $sef_rewrite = '0';
var $sef_suffix = '0';
var $feed_limit = '10';
var $feed_email = 'author';
var $secret = '4UumITYjaQLXwKJS';
var $gzip = '0';
var $error_reporting = '-1';
var $xmlrpc_server = '0';
var $log_path = '/var/www/azurproductionvideo.com/logs';
var $tmp_path = '/var/www/azurproductionvideo.com/tmp';
var $live_site = '';
var $force_ssl = '0';
var $offset = '0';
var $caching = '0';
var $cachetime = '15';
var $cache_handler = 'file';
var $memcache_settings = array();
var $ftp_enable = '0';
var $ftp_host = '127.0.0.1';
var $ftp_port = '21';
var $ftp_user = '';
var $ftp_pass = '';
var $ftp_root = '';
var $dbtype = 'mysql';
var $host = 'localhost';
var $user = 'root';
var $db = 'mauriced_azurproductionvideo';
var $dbprefix = 'jos_';
var $mailer = 'mail';
var $mailfrom = '';
var $fromname = 'Azur Production Video';
var $sendmail = '';
var $smtpauth = '1';
var $smtpsecure = 'tls';
var $smtpport = '25';
var $smtpuser = '';
var $smtppass = '';
var $smtphost = 'localhost';
var $MetaAuthor = '1';
var $MetaTitle = '1';
var $lifetime = '15';
var $session_handler = 'database';
var $password = '';
var $sitename = 'Azur Production Video';
var $MetaDesc = 'Azur Production Video
Maurice Dray Nice';
var $MetaKeys = 'Azur Production Video
Maurice Dray Paris france frenche riviera cote d\'azur, Cannes,Palm beach,Montleuze, Mont Leuze,barmitzvah,bar-mitzvah,Nice,video,montage,photo,photographe,mariage,ceremonie,synagogue,église,henné,infographie,sonorisation,clip,tirages papier,agrandissement,poster,aludibond,plexiglass,locatoin,vidéoprojection,cablages,micro,centre ville, louma, steadycam, prises de vues, photo,video,tournage,clip,montage,transcodage,intervieuw,mac,apple,asus,french riviera, cote d\'azur,nice,monaco,tr trop,saint tropez, montecarle,cafe de paris,palm beach,hermitage,domaine du montleuze,';
var $offline_message = 'Ce site est en maintenance. Merci de revenir ultérieurement.';
}
?>
SOS! Some advice please.

There is no password set for the root user in this config file.
I would also advise setting up a non root MySQL user.
In any chance, if you don't set the configuration file the Joomla! Installer should guide you through the process.

Related

Slow Archiving Google Apps Script

I'm working on a finances tracking sheet and have the entry part of it completed, and working fine. The problem is, it runs very slowly as it goes line by line in most cases. Aside from it being a lot of code, I can't figure out how to speed it up or batch anything together. Additionally, the braces for the beginning and ending of the function in question are not connected (they are both colored red when the cursor is next to them), which I can't understand. Can anyone help clean up my code a bit to speed this up?
Here is the function in question:
function onClickSubmit(e) {
var wkbk = SpreadsheetApp.getActiveSpreadsheet();
var ss = wkbk.getSheetByName("Entry");
//Bank Details Move
var bankDeposit = ss.getRange(3,9).getValue();
var bankWithdrawal = ss.getRange(3,10).getValue();
var bankDate = ss.getRange(3,12).getValue();
var targetSheet = wkbk.getSheetByName("BANK DS");
if(bankDate != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var bankAmt = (bankDeposit - bankWithdrawal);
var bankDetail = [[bankDate, bankAmt]];
targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(3,9,1,4).clearContent();
}
//Work Chits Move
var work1Hours = ss.getRange(5,9).getValue();
var work1Job = ss.getRange(5,10).getValue();
var work1Rate = ss.getRange(5,11).getValue();
var work1Date = ss.getRange(5,12).getValue();
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work1Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(5,9,1,4).clearContent();
}
var work2Hours = ss.getRange(6,9).getValue();
var work2Job = ss.getRange(6,10).getValue();
var work2Rate = ss.getRange(6,11).getValue();
var work2Date = ss.getRange(6,12).getValue();
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work2Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(6,9,1,4).clearContent();
}
var work3Hours = ss.getRange(7,9).getValue();
var work3Job = ss.getRange(7,10).getValue();
var work3Rate = ss.getRange(7,11).getValue();
var work3Date = ss.getRange(7,12).getValue();
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work3Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(7,9,1,4).clearContent();
}
//Receipts Move
var i = 9
var reDate = ss.getRange(i,12).getValue()
var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
if (reDate !=""){
while (reDate !="") {
var reAmt = ss.getRange(i,9).getValue();
var rePlace = ss.getRange(i,10).getValue();
var reCat = ss.getRange(i,11).getValue();
var reDate = ss.getRange(i,12).getValue();
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var reDetail = [[reDate,rePlace,reCat,reAmt]];
targetSheet.getRange(targetRow,1,1,4).setValues(reDetail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(i,9,1,4).clearContent();
i++
}
}
//Safe Move 3, 9, 13 (dates) 3-8, 9-12, 13-18
var safeDate = ss.getRange(3,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=3;i<9;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
// targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(3,6).clearContent();
//Safe Move 9 (rolls) 3-8, 9-12, 13-18
var safeDate = ss.getRange(9,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=9;i<13;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(9,6).clearContent();
//Safe Move (loose) 13-18
var safeDate = ss.getRange(13,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=13;i<19;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(13,6).clearContent();
}
Here is a copy of the Sheet for you to see how it works: https://docs.google.com/spreadsheets/d/1Ij7DPqQnVAR9cCpqZRf6QFUIKfgrvLvj-y5gyUPKJMw/edit?usp=sharing
Thanks in advance!
UPDATE
I accepted the more thorough of the two answers, but both offered excellent insight. While this answer has the most helpful information, the other answer added a lot as well. For anyone interested, I used a lot of these edits, and also worked at removing the calls to SpreadsheetApp methods by calling them outside of loops/if tests, and then building arrays of the results. The combination of these two answers sped up the code by about 400%, so thank you to both of you!
To further help anyone who is interested in speeding up Google Script code, here is my modified function
Note, I did have to keep in one instance of "A1:A" vs. getLastRow() because in that particular target sheet there are a number of columns with information in them that need to be ignored:
function onClickSubmit(e) {
var wkbk = SpreadsheetApp.getActiveSpreadsheet();
var ss = wkbk.getSheetByName("Entry");
//Bank Details Move
var t=ss.getRange(3,9,1,4).getValues()[0];
var bankDeposit = t[0];
var bankWithdrawal = t[1];
var bankDate = t[3];
var targetSheet = wkbk.getSheetByName("BANK DS");
if(bankDate != ""){
var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length + 1;
var bankAmt = (bankDeposit - bankWithdrawal);
var bankDetail = [[bankDate, bankAmt]];
targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(3,9,1,4).clearContent();
}
//Work Chits Move
var vals=ss.getRange(5,9,3,4).getValues();
var work1Hours = vals[0][0];
var work1Job = vals[0][1];
var work1Rate = vals[0][2];
var work1Date = vals[0][3];
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work1Date != ""){
var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length +1;
var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(5,9,1,4).clearContent();
targetRow = targetRow + 1;
}
var work2Hours = vals[1][0];
var work2Job = vals[1][1];
var work2Rate = vals[1][2];
var work2Date = vals[1][3];
if(work2Date != ""){
var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(6,9,1,4).clearContent();
targetRow = targetRow + 1;
}
var work3Hours = vals[2][0];
var work3Job = vals[2][1];
var work3Rate = vals[2][2];
var work3Date = vals[2][3];
if(work3Date != ""){
var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(7,9,1,4).clearContent();
targetRow = targetRow + 1
}
//Receipts Move
var i = 0
var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
var reDetail = [];
var reVals=ss.getRange(9,9,20,4).getValues();
var reDate = reVals[0,3]
var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length + 1;
if (reDate !=""){
while (reVals[i][3] !="") {
var reAmt = reVals[i][0];
var rePlace = reVals[i][1];
var reCat = reVals[i][2];
var reDate = reVals[i][3];
var reDetailNew = [[reDate, rePlace, reCat, reAmt]];
var reDetail = reDetail.concat(reDetailNew);
i=i+1
}
targetSheet.getRange(targetRow,1,i,4).setValues(reDetail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,i,3));
ss.getRange(9,9,i+1,4).clearContent();
//Safe Move (bills)
var targetSheet = wkbk.getSheetByName("SAFE DS");
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var safeVals = ss.getRange(3,2,16,5).getValues();
var safeDate = safeVals[0][4];
for (var i=0;i<6;i++){
var safeIn = safeVals[i][0];
var safeOut = safeVals[i][2];
var safeCnt = (safeIn - safeOut);
var safeType = safeVals[i][1];
if(safeCnt != 0){
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
targetRow = targetRow + 1;
}
}
//Safe Move (rolls)
var safeDate = safeVals[6][4];
for (var i=6;i<10;i++){
var safeIn = safeVals[i][0];
var safeOut = safeVals[i][2];
var safeCnt = (safeIn - safeOut);
var safeType = safeVals[i][1];
if(safeCnt != 0){
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
targetRow = targetRow + 1;
}
}
//Safe Move (loose)
var safeDate = safeVals[10][4];
for (var i=10;i<16;i++){
var safeIn = safeVals[i][0];
var safeOut = safeVals[i][2];
var safeCnt = (safeIn - safeOut);
var safeType = safeVals[i][1];
if(safeCnt != 0){
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
targetRow = targetRow + 1;
}
}
ss.getRange(3,2,16,1).clearContent();
ss.getRange(3,4,16,1).clearContent();
ss.getRange(3,6,16,1).clearContent();
}
}
Here's some suggestions:
I put my suggestions as comments below your code.
In general avoid the use of getValue() use getValues() instead it returns a 2D array of data. Read the documentation and also look at the returned values in the debugger so that you really understand what you data looks like: [[row0],[row1],[row2]....]
and avoid the use of A1 notations of the form A1:A. Use Sheet.getRange(1,1,Sheet.getLastRow().... instead.
function onClickSubmit(e) {
var wkbk = SpreadsheetApp.getActiveSpreadsheet();
var ss = wkbk.getSheetByName("Entry");
//Bank Details Move
var bankDeposit = ss.getRange(3,9).getValue();
var bankWithdrawal = ss.getRange(3,10).getValue();
var bankDate = ss.getRange(3,12).getValue();
var targetSheet = wkbk.getSheetByName("BANK DS");
//var t=ss.getRange(3,9,1,4).getValues()[0];
//var bankDeposit = t[0];
//var bankWithdrawal = t[1];
//var bankDate = t[3];
//var targetSheet = wkbk.getSheetByName("BANK DS");
if(bankDate != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();//This often returns nulls between data last row and max rows
var targetRow = Avals.filter(String).length + 1;
//var targetRow = targetSheet.getRange(1,1,targetSheet.getLastRow()).getValues().length;
var values = ss.getRange("A:A").getValues();//Same problem as described above
var bankAmt = (bankDeposit - bankWithdrawal);
var bankDetail = [[bankDate, bankAmt]];
targetSheet.getRange(targetRow,1,1,2).setValues(bankDetail);
targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(3,9,1,4).clearContent();
}
//Work Chits Move
var work1Hours = ss.getRange(5,9).getValue();
var work1Job = ss.getRange(5,10).getValue();
var work1Rate = ss.getRange(5,11).getValue();
var work1Date = ss.getRange(5,12).getValue();
//try as above to get data all at once
//var vals=ss.getRange(5,9,1,4).getValues();
//then use vals[0]...
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work1Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work1Detail = [[work1Date,work1Job,work1Hours,work1Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work1Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(5,9,1,4).clearContent();
}
var work2Hours = ss.getRange(6,9).getValue();
var work2Job = ss.getRange(6,10).getValue();
var work2Rate = ss.getRange(6,11).getValue();
var work2Date = ss.getRange(6,12).getValue();
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work2Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work2Detail = [[work2Date,work2Job,work2Hours,work2Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work2Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(6,9,1,4).clearContent();
}
var work3Hours = ss.getRange(7,9).getValue();
var work3Job = ss.getRange(7,10).getValue();
var work3Rate = ss.getRange(7,11).getValue();
var work3Date = ss.getRange(7,12).getValue();
var targetSheet = wkbk.getSheetByName("WORK DS");
if(work3Date != ""){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var work3Detail = [[work3Date,work3Job,work3Hours,work3Rate]];
targetSheet.getRange(targetRow,1,1,4).setValues(work3Detail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(7,9,1,4).clearContent();
}
//Receipts Move
var i = 9
var reDate = ss.getRange(i,12).getValue()
var targetSheet = wkbk.getSheetByName("RECEIPTS DS");
if (reDate !=""){
while (reDate !="") {
var reAmt = ss.getRange(i,9).getValue();
var rePlace = ss.getRange(i,10).getValue();
var reCat = ss.getRange(i,11).getValue();
var reDate = ss.getRange(i,12).getValue();
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var reDetail = [[reDate,rePlace,reCat,reAmt]];
targetSheet.getRange(targetRow,1,1,4).setValues(reDetail);
targetSheet.getRange(targetRow-1,5,1,3).copyTo(targetSheet.getRange(targetRow,5,1,3));
ss.getRange(i,9,1,4).clearContent();
i++
}
}
//Safe Move 3, 9, 13 (dates) 3-8, 9-12, 13-18
var safeDate = ss.getRange(3,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=3;i<9;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
// targetSheet.getRange(targetRow-1,3).copyTo(targetSheet.getRange(targetRow,3));
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(3,6).clearContent();
//Safe Move 9 (rolls) 3-8, 9-12, 13-18
var safeDate = ss.getRange(9,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=9;i<13;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(9,6).clearContent();
//Safe Move (loose) 13-18
var safeDate = ss.getRange(13,6).getValue();
var targetSheet = wkbk.getSheetByName("SAFE DS");
for (var i=13;i<19;i++){
var safeIn = ss.getRange(i,2).getValue();
var safeOut = ss.getRange(i,4).getValue();
var safeCnt = (safeIn - safeOut);
var safeType = ss.getRange(i,3).getValue();
if(safeCnt != 0){
//Finds first blank cell in column A, to enter new data in:
var Avals = targetSheet.getRange("A1:A").getValues();
var targetRow = Avals.filter(String).length + 1;
var values = ss.getRange("A:A").getValues();
var safeDetail = [[safeDate, safeType,safeCnt]];
targetSheet.getRange(targetRow,1,1,3).setValues(safeDetail);
ss.getRange(i,2).clearContent();
ss.getRange(i,4).clearContent();
}
}
ss.getRange(13,6).clearContent();
}
Your script is slow because it's making many calls to the SpreadsheetApp methods. To improve it's performance you should change the logic to reduce these calls and use Arrays to manipulate the data.
I.E. instead of using multiple getValue() use only one getValues(), you could even use getDatatRange() to get the "data range" (a range embracing all the cells having data including the blank cell between them) of a sheet, then use getValues() to get all the sheet values.
As a rule of thumb avoid using SpreadsheetApp methods inside loops (for, while, etc)

Script Not Operating Independent of Other Scripts

I have set up a rough script (new to this) to automate some data entry that I have to do consistently. I build a UI with checkboxes and have data fill into the sheet based on the responses to the checks. It all works correctly for one product. The problem is that I have duplicated this for other products. When recreated for a second product, I have to rename the function in the second script to "BUILDUI2" in order to see the correct options display (otherwise it displays the options from the previous script). Then, even though I see the correct check boxes, the responses to the check boxes are based off of the first script created. So on the second product, selecting the second checkbox inserts the data specified in the original BuildUI script that is tied to the other product rather than the data shown under BuildUI2.
These are independent scripts activated by separate push buttons on the sheet.
Any insight on how to get the second (and third, and fourth) scripts to read the correct information?
Product 1 Script:
function BuildUI() {
//create the application itself
var app = UiApp.createApplication().setHeight(160).setWidth(250);
app.setTitle("Options");
//create panels and add them to the UI
var panel = app.createVerticalPanel();
//create a text box
var check1 = app.createCheckBox("Safety Aprons");
check1.setName('CheckBox1');
var check2 = app.createCheckBox("Standard Trash Racks (1)");
check2.setName('CheckBox2');
var check3 = app.createCheckBox("Standard Trash Racks (2) ");
check3.setName('CheckBox3');
var check4 = app.createCheckBox("Plate Style Trash Racks (1)");
check4.setName('CheckBox4');
var check5 = app.createCheckBox("Plate Style Trash Racks (2) ");
check5.setName('CheckBox5');
var check6 = app.createCheckBox("6:1 Safety Grates (1)");
check6.setName('CheckBox6');
var check7 = app.createCheckBox("6:1 Safety Grates (2)");
check7.setName('CheckBox7');
//create a submit button
var button = app.createButton('Done');
//add the text box and the button to the panel
panel.add(check1);
panel.add(check2);
panel.add(check3);
panel.add(check4);
panel.add(check5);
panel.add(check6);
panel.add(check7);
panel.add(button);
var handler = app.createServerHandler("submitButton");
button.addClickHandler(handler);
handler.addCallbackElement(panel);
//add the panel to the application
app.add(panel);
var doc = SpreadsheetApp.getActive();
doc.show(app);
}
function submitButton(e){
var app = UiApp.getActiveApplication();
var sheet = SpreadsheetApp.getActiveSheet();
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox1 == 'true') {
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = lastrow-4; i <= numRows - 1; i++) {
var row = values[i];
if (row[2] == 'R012M-BAM' || row[2] == 'R012M-BAF') {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;}
}
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow+1,3).setValue("R012M-BSAF6");
sheet.getRange(lastrow+1,5).setValue("1");
sheet.getRange(lastrow+2,3).setValue("R012M-BSAM6");
sheet.getRange(lastrow+2,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox2 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00092");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox3 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00092");
sheet.getRange(lastrow+1,5).setValue("2");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox4 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00094");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox5 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00094");
sheet.getRange(lastrow+1,5).setValue("2");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox6 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00095");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox7 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00095");
sheet.getRange(lastrow+1,5).setValue("2");
}
return app.close();
}
Product 2 Script:
function BuildUI2() {
//create the application itself
var app = UiApp.createApplication().setHeight(225).setWidth(250);
app.setTitle("Options");
//create panels and add them to the UI
var panel = app.createVerticalPanel();
//create a text box
var check1 = app.createCheckBox("Safety Aprons");
check1.setName('CheckBox1');
var check2 = app.createCheckBox("Pipe Style Trash Racks (1)");
check2.setName('CheckBox2');
var check3 = app.createCheckBox("Pipe Style Trash Racks (2) ");
check3.setName('CheckBox3');
var check4 = app.createCheckBox("Plate Style Trash Racks (1)");
check4.setName('CheckBox4');
var check5 = app.createCheckBox("Plate Style Trash Racks (2) ");
check5.setName('CheckBox5');
var check6 = app.createCheckBox("Bull Nose Style Trash Racks (1)");
check6.setName('CheckBox6');
var check7 = app.createCheckBox("Bull Nose Style Trash Racks (2) ");
check7.setName('CheckBox7');
var check8 = app.createCheckBox("6:1 Safety Grates (1)");
check8.setName('CheckBox8');
var check9 = app.createCheckBox("6:1 Safety Grates (2)");
check9.setName('CheckBox9');
//create a submit button
var button = app.createButton('Done');
//add the text box and the button to the panel
panel.add(check1);
panel.add(check2);
panel.add(check3);
panel.add(check4);
panel.add(check5);
panel.add(check6);
panel.add(check7);
panel.add(check8);
panel.add(check9);
panel.add(button);
var handler = app.createServerHandler("submitButton");
button.addClickHandler(handler);
handler.addCallbackElement(panel);
//add the panel to the application
app.add(panel);
var doc = SpreadsheetApp.getActive();
doc.show(app);
}
function submitButton(e){
var app = UiApp.getActiveApplication();
var sheet = SpreadsheetApp.getActiveSheet();
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox1 == 'true') {
var rows = sheet.getDataRange();
var numRows = rows.getNumRows();
var values = rows.getValues();
var rowsDeleted = 0;
for (var i = lastrow-4; i <= numRows - 1; i++) {
var row = values[i];
if (row[2] == 'R015M-BAM' || row[2] == 'R015M-BAF') {
sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
rowsDeleted++;}
}
var lastrow = sheet.getLastRow();
sheet.getRange(lastrow+1,3).setValue("R015M-BSAF6");
sheet.getRange(lastrow+1,5).setValue("1");
sheet.getRange(lastrow+2,3).setValue("R015M-BSAM6");
sheet.getRange(lastrow+2,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox2 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00194");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox3 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00194");
sheet.getRange(lastrow+1,5).setValue("2");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox4 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00097");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox5 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00097");
sheet.getRange(lastrow+1,5).setValue("2");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox6 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00440");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox7 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00440");
sheet.getRange(lastrow+1,5).setValue("2");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox8 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00101");
sheet.getRange(lastrow+1,5).setValue("1");
}
var lastrow = sheet.getLastRow();
if(e.parameter.CheckBox9 == 'true')
{sheet.getRange(lastrow+1,3).setValue("85-00101");
sheet.getRange(lastrow+1,5).setValue("2");
}
return app.close();
}

Multiple Dataset AmstockChart with multiple Axis [closed]

Closed. This question needs to be more focused. It is not currently accepting answers.
Want to improve this question? Update the question so it focuses on one problem only by editing this post.
Closed 7 years ago.
Improve this question
I want to implement multiple value axis in following amchart sample:
https://www.amcharts.com/demos/multiple-data-sets/
Multiple axis example: http://www.amcharts.com/tips/multiple-value-axes-stock-chart/
I tried a lot but I think I miss some minor thing.
Is there any way to combine above charts (multi value and multi data Set) and create a multiple value axis multiple data sets Chart?
Examples with jsfiddle will work best for me. Thanks :)
I did this myself. Hope this becomes helpful to someone. Here is the solution:
AmCharts.ready(function () {
generateChartData();
createStockChart();
});
var colors = [
"#FF6600", "#B0DE09", "#FCD202", "#2A0CD0",
"#CD0D74", "#CC0000", "#00CC00", "#0000CC", "#DDDDDD",
"#999999", "#333333", "#990000", "#0D8ECF"
];
var chartData1 = [];
var chartData2 = [];
var chartData3 = [];
var chartData4 = [];
function generateChartData() {
var firstDate = new Date();
firstDate.setDate(firstDate.getDate() - 500);
firstDate.setHours(0, 0, 0, 0);
for (var i = 0; i < 500; i++) {
var newDate = new Date(firstDate);
newDate.setDate(newDate.getDate()+i);
newDate.setHours(0, 0, 0, 0);
var value1 = Math.round(Math.random() * (40 + i)) + 100 + i;
var value2 = Math.round(Math.random() * (100 + i)) + 200 + i;
var value3 = Math.round(Math.random() * (100 + i)) + 200;
var value4 = Math.round(Math.random() * (100 + i)) + 200 + i;
chartData1.push({date: newDate,value1: value1});
chartData2.push({date: newDate,value2: value2});
chartData3.push({date: newDate,value3: value3});
chartData4.push({date: newDate,value4: value4});
}
}
function createStockChart() {
var chart = new AmCharts.AmStockChart();
chart.pathToImages = "http://www.amcharts.com/lib/3/images/";
var dataSet1 = new AmCharts.DataSet();
dataSet1.fieldMappings = [{fromField: "value1", toField: "value1"}];
dataSet1.dataProvider = chartData1;
dataSet1.categoryField = "date";
dataSet1.title = "Value1";
dataSet1.color = colors[0];
var dataSet2 = new AmCharts.DataSet();
dataSet2.fieldMappings = [{fromField: "value2", toField: "value2"}];
dataSet2.dataProvider = chartData2;
dataSet2.categoryField = "date";
dataSet2.title = "Value2";
dataSet2.color = colors[1];
var dataSet3 = new AmCharts.DataSet();
dataSet3.fieldMappings = [{fromField: "value3", toField: "value3"}];
dataSet3.dataProvider = chartData3;
dataSet3.categoryField = "date";
dataSet3.title = "Value3";
dataSet3.color = colors[2];
var dataSet4 = new AmCharts.DataSet();
dataSet4.fieldMappings = [{fromField: "value4", toField: "value4"}];
dataSet4.dataProvider = chartData4;
dataSet4.categoryField = "date";
dataSet4.title = "Value4";
dataSet4.color = colors[3];
// set data sets to the chart
chart.dataSets = [dataSet1,dataSet2,dataSet3,dataSet4];
// PANELS ///////////////////////////////////////////
// first stock panel
var stockPanel = new AmCharts.StockPanel();
stockPanel.recalculateToPercents = "never";
stockPanel.title = "Volume";
var categoryAxesSettings = new AmCharts.CategoryAxesSettings();
categoryAxesSettings.minPeriod = "DD";
chart.categoryAxesSettings = categoryAxesSettings;
// apply custom style for value axes
var valueAxesSettings = new AmCharts.ValueAxesSettings();
valueAxesSettings.axisAlpha = 1;
valueAxesSettings.gridThickness = 0;
valueAxesSettings.axisThickness = 2;
valueAxesSettings.inside = false;
chart.valueAxesSettings = valueAxesSettings;
// apply custom style for panels settings
var panelsSettings = new AmCharts.PanelsSettings();
panelsSettings.marginLeft = 100;
panelsSettings.marginRight = 100;
chart.panelsSettings = panelsSettings;
// add first value axes
var valueAxis1 = new AmCharts.ValueAxis();
valueAxis1.axisColor = colors[0];
valueAxis1.color = colors[0];
valueAxis1.offset = 0;
stockPanel.addValueAxis(valueAxis1);
// add second value axes
var valueAxis2 = new AmCharts.ValueAxis();
valueAxis2.axisColor = colors[1];
valueAxis2.color = colors[1];
valueAxis2.offset = 0;
valueAxis2.position = "right";
stockPanel.addValueAxis(valueAxis2);
// add third value axes
var valueAxis3 = new AmCharts.ValueAxis();
valueAxis3.axisColor = colors[2];
valueAxis3.color = colors[2];
valueAxis3.offset = 50;
stockPanel.addValueAxis(valueAxis3);
// add fourth value axes
var valueAxis4 = new AmCharts.ValueAxis();
valueAxis4.axisColor = colors[3];
valueAxis4.color = colors[3];
valueAxis4.offset = 50;
valueAxis4.position = "right";
stockPanel.addValueAxis(valueAxis4);
// graph of first stock panel
var graph1 = new AmCharts.StockGraph();
graph1.valueField = "value1";
graph1.comparable = true;
graph1.title = "Value1";
graph1.useDataSetColors = false;
graph1.lineColor = colors[0];
graph1.bullet = "round";
graph1.bulletBorderColor = "#FFFFFF";
graph1.bulletBorderAlpha = 1;
graph1.balloonText = "[[title]]:<b>[[value]]</b>";
graph1.compareGraphBalloonText = "[[title]]:<b>[[value]]</b>";
graph1.compareGraphBullet = "round";
graph1.compareGraphBulletBorderColor = "#FFFFFF";
graph1.compareGraphBulletBorderAlpha = 1;
graph1.valueAxis = valueAxis1;
stockPanel.addStockGraph(graph1);
// graph of second stock panel
var graph2 = new AmCharts.StockGraph();
graph2.valueField = "value2";
graph2.comparable = true;
graph2.title = "Value2";
graph2.useDataSetColors = false;
graph2.lineColor = colors[1];
graph2.bullet = "round";
graph2.bulletBorderColor = "#FFFFFF";
graph2.bulletBorderAlpha = 1;
graph2.balloonText = "[[title]]:<b>[[value]]</b>";
graph2.compareGraphBalloonText = "[[title]]:<b>[[value]]</b>";
graph2.compareGraphBullet = "round";
graph2.compareGraphBulletBorderColor = "#FFFFFF";
graph2.compareGraphBulletBorderAlpha = 1;
graph2.valueAxis = valueAxis2;
stockPanel.addStockGraph(graph2);
// graph of third stock panel
var graph3 = new AmCharts.StockGraph();
graph3.valueField = "value3";
graph3.comparable = true;
graph3.title = "Value3";
graph3.useDataSetColors = false;
graph3.lineColor = colors[2];
graph3.bullet = "round";
graph3.bulletBorderColor = "#FFFFFF";
graph3.bulletBorderAlpha = 1;
graph3.balloonText = "[[title]]:<b>[[value]]</b>";
graph3.compareGraphBalloonText = "[[title]]:<b>[[value]]</b>";
graph3.compareGraphBullet = "round";
graph3.showEventsOnComparedGraphs = true;
graph3.compareGraphBulletBorderColor = "#FFFFFF";
graph3.compareGraphBulletBorderAlpha = 1;
graph3.valueAxis = valueAxis3;
stockPanel.addStockGraph(graph3);
// graph of fourth stock panel
var graph4 = new AmCharts.StockGraph();
graph4.comparable = true;
graph4.valueField = "value4";
graph4.title = "Value4";
graph4.useDataSetColors = false;
graph4.lineColor = colors[3];
graph4.bullet = "round";
graph4.bulletBorderColor = "#FFFFFF";
graph4.bulletBorderAlpha = 1;
graph4.balloonText = "[[title]]:<b>[[value]]</b>";
graph4.compareGraphBalloonText = "[[title]]:<b>[[value]]</b>";
graph4.compareGraphBullet = "round";
graph4.compareGraphBulletBorderColor = "#FFFFFF";
graph4.compareGraphBulletBorderAlpha = 1;
graph4.valueAxis = valueAxis4;
stockPanel.addStockGraph(graph4);
// create stock legend
var stockLegend1 = new AmCharts.StockLegend();
stockLegend1.periodValueTextComparing = "[[percents.value.close]]%";
stockLegend1.periodValueTextRegular = "[[value.close]]";
stockPanel.stockLegend = stockLegend1;
var periodSelector = new AmCharts.PeriodSelector();
periodSelector.periods = [
{period: "DD",count: 5,label: "5 day"},{period: "DD",count: 10,label: "10 days"},
{period: "MM",count: 1,label: "1 month",selected: true}, {period: "YYYY",count: 1,label: "1 year"},
{period: "YTD",label: "YTD"}, {period: "MAX",label: "MAX"}];
periodSelector.position = "left";
chart.periodSelector = periodSelector;
// DATA SET SELECTOR
var dataSetSelector = new AmCharts.DataSetSelector();
dataSetSelector.position = "left";
chart.dataSetSelector = dataSetSelector;
// set panels to the chart
chart.panels = [stockPanel];
// OTHER SETTINGS ////////////////////////////////////
var sbsettings = new AmCharts.ChartScrollbarSettings();
sbsettings.backgroundColor = "#222";
sbsettings.selectedBackgroundColor = "#555";
sbsettings.selectedGraphFillAlpha = 1;
chart.chartScrollbarSettings = sbsettings;
var chartScrollbar = new AmCharts.ChartScrollbar();
chartScrollbar.autoGridCount = true;
chartScrollbar.scrollbarHeight = 40;
chart.chartScrollbar = chartScrollbar;
// CURSOR settings
var cursorSettings = new AmCharts.ChartCursorSettings();
cursorSettings.valueBalloonsEnabled = true;
cursorSettings.cursorAlpha = 0.5;
cursorSettings.valueLineBalloonEnabled = true;
cursorSettings.valueLineEnabled = true;
cursorSettings.valueLineAlpha = 0.5;
cursorSettings.cursorPosition = "mouse";
chart.chartCursorSettings = cursorSettings;
var categoryAxis = new AmCharts.CategoryAxis();
chart.categoryAxis = categoryAxis;
chart.write('chartdiv');
}
body{
font-size:12px;
color:#000000;
background-color:#ffffff;
font-family:verdana,helvetica,arial,sans-serif;
}
.amChartsButtonSelected{
background-color:#CC0000;
border-style:solid;
border-color:#CC0000;
border-width:1px;
color:#FFFFFF;
-moz-border-radius: 5px;
border-radius: 5px;
margin: 1px;
}
.amChartsButton{
background-color:#EEEEEE;
border-style:solid;
border-color:#CCCCCC;
border-width:1px;
color:#000000;
-moz-border-radius: 5px;
border-radius: 5px;
margin: 1px;
}
.amChartsCompareList{
border-style:solid;
border-color:#CCCCCC;
border-width:1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="http://www.amcharts.com/lib/3/amcharts.js" type="text/javascript"></script>
<script src="http://www.amcharts.com/lib/3/serial.js" type="text/javascript"></script>
<script src="http://www.amcharts.com/lib/3/amstock.js" type="text/javascript"></script>
<div id="chartdiv" style="width: 100%; height: 500px;"></div>

BIRT maintain line break in 1 cell only

I am trying to keep the line break inside one cell only, however it's still not working after i do the change below and export it to excel.
The change is to replace end of a list by "<br style="mso-data-placement:same-cell;/>"
var reUselessTags = /(<.{0,1}body|<.{0,1}FONT|<.{0,1}TEXTFORMAT|<img|<.{0,1}div|<.{0,1}list).{0,}?>/g;
var reRemoveScript = /<script.{0,}?<\/script>/g;
var reList = /<LI.{0,}?>/g;
var reListParagraphStart = /<(LI|P).{0,}?>/g;
var reListParagraphEnd = /<(\/LI|\/P).{0,}?>/g;
var reBreak = /<BR.{0,}?>/g;
var reDoubleLineBreak = /\r+/g;
var reOpenLineBreak = /^\r/g;
var resStr = row["DESCRIPTION"];
resStr = resStr.replace(reUselessTags,'');
resStr = resStr.replace(reRemoveScript,'');
resStr = resStr.replace(reBreak,'');
resStr = resStr.replace(reDoubleLineBreak,'');
resStr = resStr.replace(reOpenLineBreak,'');
resStr = resStr.replace(newLine, '');
resStr = resStr.replace(reList, '');
resStr = resStr.replace(reListParagraphStart,'');
resStr = resStr.replace(reListParagraphEnd,'<br style="mso-data-placement:same-cell;" />');
result

change canvas images

I like to change some canvas image (hat and jacket)
here is the code
document.ready = function() {
canvas = document.getElementById('canvasspace');
ctx = canvas.getContext('2d');
drawImage();
}
function drawImage(){
var tempimage = new Image();
tempimage.src = jackets_images[jacket_to_draw];
tempimage.onload = function (){ ctx.drawImage(tempimage, 0, 0); };
var tempimage2 = new Image();
tempimage2.src = hats_images[hat_to_draw];
tempimage2.onload = function (){ ctx.drawImage(tempimage2, 0, 0); };
}
the two image show up one over the other one, but making 2 time the code with 2 new Image(); does not seem fine to my eye ! but i dont know better.. please show me the light
var imageNames = new Array();
imageNames[0] = jackets_images[jacket_to_draw];
imageNames[1] = hats_images[hat_to_draw];
var drawnImages = new Array();
function drawImage(images) {
for (var i = 0; i < images.length; i++) {
drawnImages[i] = new Image();
drawnImages[i].src = images[i];
drawnImages[i].onload = function (){
var thisImg = drawnImages[i];
ctx.drawImage(thisImg, 0, 0);
};
}
}

Resources