Я на OSX 10.10.2 и преуспел в использовании JPype.
Устранены проблемы установки с Jnius ( другие тоже ), Javabridge установлен, но дал таинственные ошибки когда я попытался использовать его, PyJ4 испытывает такое неудобство при запуске сервера шлюза в Java сначала, JCC не будет устанавливать. Наконец, JPype закончил работу. В Github есть поддерживаемая форма JPype . Он имеет следующие основные преимущества: (a) он правильно устанавливается и (b) он может очень эффективно преобразовывать массивы java в массив numpy (np_arr = java_arr[:]
)
Процесс установки был:
git clone https://github.com/originell/jpype.git
cd jpype
python setup.py install
И вы должны быть в состоянии import jpype
Следующая демо работала:
import jpype as jp
jp.startJVM(jp.getDefaultJVMPath(), "-ea")
jp.java.lang.System.out.println("hello world")
jp.shutdownJVM()
Когда я попытался вызвать свой собственный Java-код, мне пришлось сначала скомпилировать (javac ./blah/HelloWorldJPype.java
), и мне пришлось изменить путь JVM по умолчанию (в противном случае вы получите необъяснимые ошибки «class not found»). Для меня это означало изменение команды startJVM на:
jp.startJVM('/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/MacOS/libjli.dylib', "-ea")
c = jp.JClass('blah.HelloWorldJPype')
# Where my java class file is in ./blah/HelloWorldJPype.class
...
Попробуйте это:
function onEdit(e) {
var rg=e.range;
var sh=rg.getSheet();
var name=sh.getName();
if( name=="GMB Descriptions") {
if( rg.columnStart==4) {
var nextCell = rg.offset(0, 1);
if( nextCell.getValue()=='') {
var dt=Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yy - h:mm a");
nextCell.setValue(Utilities.formatString('%s\n%s',dt,Session.getActiveUser().getEmail()));
}
}
}
}
Модифицированный (и немного уменьшенный) скрипт приведен ниже:
function onEdit(e) {
var rg = e.range;
if (rg.getSheet().getName() == "GMB Descriptions" && rg.columnStart == 4) {
var nextCell = rg.offset(0, 1);
if (nextCell.getValue() == '') {
var dt = Utilities.formatDate(new Date(), Session.getScriptTimeZone(), "MM/dd/yyyy - h:mm a - ");
var userMail = e.user.getEmail();
nextCell.setValue(dt + userMail);
}
}
}
Благодаря Куперу за подсказку Utilities он работает отлично. Мы используем e.user.getEmail()
, предполагая, что проблем с безопасностью нет (по мнению автора). Во время тестирования у меня все работает как положено.