Конкатенация строк в Excel, включая операторы if else - PullRequest
1 голос
/ 21 июня 2019

У меня есть эта таблица

      A      B       C       D
 1   User | priv1 | priv2 | priv3
 2   test |   y   |   n   |   n   
 3   more |   n   |   y   |   n  

и так далее, и я хочу генерировать команды db2 из этого.

 ="GRANT "&(IF B2="y", B1, "")& ", "&(IF C2="y", C1, "" )& ", "&(IF D2="y", D1, "" )&" on DATABSE TO USER "&A2&";"

должно быть

 GRANT priv1 ON DATABASE TO USER test;

Однако я не могу заставить эти части работать.

Есть идеи?Я перепробовал много синтаксисов, но ни один не заставил его работать.Google тоже не был моим другом.

EXCEL 365 в Windows 10

Спасибо

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

если вы хотите, чтобы в ячейках было несколько символов "y", вы можете использовать функцию textJoin

как это:

="GRANT "&TEXTJOIN(", ";1;IF(B2="y";$B$1;"");IF(C2="y";$C$1;"");IF(D2="y";$D$1;""))&" on DATABASE TO USER "&A2&";"

эта формула поместит запятые при необходимости

вот рабочий пример: https://drive.google.com/open?id=1UmuNpkKQz4KWPJIqT8j8iFO1GB5_J119

UPDATE: если вы можете изменить исходную таблицу, лучше изменить ее следующим образом:

      A      B       C       D
 1   User | priv1 |       |     
 2   test | priv2 |       |      
 3   more | priv3 |       |   
 4   other| priv1 | priv3 |

тогда формула будет более простой, как это:

="grant "&TEXTJOIN(", ";1;B2:D2)&" on database to user "&A2&";"

вот пример: https://drive.google.com/open?id=1IiSmT3OYLpxMvaeG0KYgK17ZYengWxWu

0 голосов
/ 21 июня 2019

скобки после IF

 ="GRANT "&IF(B2="y", B1, "")& ", "&IF(C2="y", C1, "" )& ", "&IF(D2="y", D1, "" )&" on DATABASE TO USER "&A2&";"

РЕДАКТИРОВАТЬ: И кавычки aropund текст в B1, C1, D1 и A2

="GRANT "&IF(B2="y", "'"&B1&"'", "")& ", "&IF(C2="y", "'"&C1&"'", "" )& ", "&IF(D2="y","'"&D1&"'", "" )&" on DATABASE TO USER '"&A2&"';"
...