Замена пустых ячеек таблиц

  • Автор темы Автор темы Garyanych
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Garyanych

Участник
Топикстартер
Сообщения
3
Реакции
0
Здравствуйте.
Помогите в данной ситуации если не сложно.
Есть триста страниц таблиц в которых бесконечное количество пустых ячеек.
В них нужно проставить тире.
Нашел на форуме подобную тему:
http://forum.rudtp.ru/threads/perep...imvol-konca-jachejki.54054/page-2#post-612716
Но она закрыта и там задать вопрос не могу.
Вообщем задаю найти:
(?<!.)\Z
Заменить: ~c (копирую тире)

Суть проблемы: работает с одной ячейкой -исправно вставляет тире.
Change all не работает.
А ячеек в таблицах тысячи.
После полутра часов кликанья Change/Find next -решил обратиться сюда.
 
А если перетащить в Excel и там победить всё?
Должна быть команда распознавания "Эта ячейка пуста", и тогда автоматически проставить тире.
Видимо, лучше всего по длине строки текста. Если оная равна нулю, то ячейка пуста.
=ЕСЛИ (ДЛСТР(ХХХХ)=0;"—";ХХХХ)
где ХХХХ — адрес ячейки.

Эта формула проставит вам тире в случаях, когда нет символов в ячейке.
И скопирует то же содержимое в противном случае.

Придётся правее всей таблицы делать её усовершенствованную копию, то есть столбцы будут содержать значения ячеек, если те непустые, и тире в противном случае. И помещению в готовую публикацию подлежит таблица с исчисленными таким образом ячейками.
 
Пользуйтесь в Excel мощнейшей функцией Автофильтр.
 
Накидал со скуки скрипт. Проверок толком не делал - возможны вылеты, например, если нет открытых документов.
Код:
#target Indesign
var EmptyFiller = '-';
/**
пробежка по всем ячейкам активного документа, если они пустые, то
в них пишется значение EmptyFiller - сейчас - тирешка.

app -> activeDocument -> textFrames -> tables -> cells
*/
with (app.activeDocument){
        var items = textFrames;
        var i = items.length;
        while (i--) {
                var currFrame = items.item(i);
                var j = currFrame.tables.length;
                if (j == 0)  continue;
                        while (j--) {
                                var table = currFrame.tables.item(j);
                                var k = table.cells.length;
                                    if (k==0) continue;
                                    while (k--) {
                                            if (! table.cells.item(k).contents) table.cells.item(k).contents = EmptyFiller;
                                    }
                        }  
         }
       
}
 

Вложения

Я бы не по фреймам пошёл, а по story (одна таблица может быть в нескольких фреймах, а значит будет обрабатываться несколько раз).
Код:
var c = app.activeDocument.stories.everyItem().tables.everyItem().cells.everyItem().getElements();
for (i = 0; i<c.length; i++){if (c[i].texts[0].characters.length == 0) c[i].contents = "-";}
Ещё важный момент: если в ячейке есть текст, но он весь в оверсете, условие (!cell.contents) сработает и заменит этот текст на тире. Поэтому проверку здесь надо делать именно (cell.texts[0]).
 
Последнее редактирование:
А если перетащить в Excel и там победить всё?
Должна быть команда распознавания "Эта ячейка пуста", и тогда автоматически проставить тире.
Видимо, лучше всего по длине строки текста. Если оная равна нулю, то ячейка пуста.
=ЕСЛИ (ДЛСТР(ХХХХ)=0;"—";ХХХХ)
где ХХХХ — адрес ячейки.

Эта формула проставит вам тире в случаях, когда нет символов в ячейке.
И скопирует то же содержимое в противном случае.

Придётся правее всей таблицы делать её усовершенствованную копию, то есть столбцы будут содержать значения ячеек, если те непустые, и тире в противном случае. И помещению в готовую публикацию подлежит таблица с исчисленными таким образом ячейками.
Беда в том что икселем совсем не владею ((
Проблему поборол. Нашелся товарищ написавший скрипт. Если кому- то нужен -с удовольствием поделюсь.
Огромное спасибо за участие.
 
Как то так:
//Тире в пустых ячейках.jsx
// Во всем документе в пустые ячейки таблиц вставляем тире

var myDoc = app.activeDocument;
var aaa = "";
for ( var s = 0; s < myDoc.stories.count(); s++ ) {
// цикл по таблицам в текущей story
for ( var t = 0; t < myDoc.stories.item(s).tables.count(); t++ ) {
var myTable = myDoc.stories.item(s).tables.item(t)
// Цикл по ячейкам текущей таблицы
for(var c=0; c< myTable.cells.length; c++) {
if (myTable.cells[c].contents == "") myTable.cells[c].insertionPoints[0].contents = "—";
} // for c
} // for t
} // for s
 
Статус
Закрыто для дальнейших ответов.