Все технические форумы на одном сайте Удобный поиск информации с популярных форумов в одном месте
Вопрос: Скопировать часть текста ячейки

Всем привет ! Подскажите возможно ли с помощью vba скопировать определеную часть текста ячейку в соседнюю например текст в ячейке: 1-11-16 сумма отчета= 35727, 45usd нужно в соседнюю ячейку скопировать сумму 35727, 45 . Была идея использовать формулу но позиция вхождения и кол-во знаков может меняться (т.е если в сумме больше разрядов то уже формула сработает некорректно. Как то можно указать позицию вхождения после знака "=" и конец перед словом "usd". Заранее Спасибо
Ответ: Для того чтобы всё сработало точно, нужно изначально записывать отформатированные данные
Сообщение от roneta90
1-11-16
Это наверно дата, тут плюс\минус один символ, значит записывать дату нужно отформатированную, что была вида 00-00-00
Visual Basic
1
= Format(Value, "DD-MM-YY") ' 01-11-16
Так же и с суммой, например что бы сумма всегда была шестизначной плюс два знака после запятой
Visual Basic
1
 = Format(Value, "000000.00") ' 035727,45
В любом случае ваша задача подразумевает автоматизированную запись в ячейки с форматированием и по регламенту ))
Вопрос: Вставка в текст ячейки таблицы документа Word объектов отличных от текста

Здравствуйте! Столкнулся с задачей, решение которой никак не могу найти . Задача следующая: необходимо в ячейке таблицы документа Word, посредством возможностей C#, заменить определенные маркеры на содержимое из ячеек с другой таблицы во все том же документе. Сложность заключается в том, что содержимое второй таблицы не всегда будет представлено текстом. Т.е. текстовые маркеры нужно заменять на различные объекты, тип которых заранее не определен (формула, рисунок, таблица, текст, ссылка и др.).
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
public Result Open(string PathDocument)
        {
            Result result = new Result(); //результат выполнения ф-и
            result.Error = TypeError.NotError;
            //запус кприложения
            Word.Application WordApp = new Word.Application();
            //отображем окно
            WordApp.Visible = true;
            try
            {
                //открываем документ
                Word.Document WordDoc = WordApp.Documents.Open(PathDocument);
                Word.Range rng = WordDoc.Range(); 
                //Соответствие структуры док.: минимум две таблицы
                if (rng.Tables.Count < 2)
                {
                    result.Error = TypeError.NotCorrectTypeDocument;
                }
                else
                {
                    Word.Table QuestionsTable = rng.Tables[1]; //табица с вопросами
                    Word.Table ContentTable = rng.Tables[2]; //таблица ресурсов
                    //соответсвтвие количеству строк в первой таблице
                    if (QuestionsTable.Rows.Count < 2)
                    {
                        //нет вопросов
                        result.Error = TypeError.NotQuestionsInDocument;
                    }
                    else
                    {
                        //словарь содержит связку ТЕГ - РЕСУРС
                        Dictionary<string, Word.Range> Content = new Dictionary<string, Microsoft.Office.Interop.Word.Range>();
                        //задаем соответствие
                        for (int j = 2; j < ContentTable.Rows.Count + 1; j++)
                        {
                            string TempKey = ContentTable.Cell(j, 1).Range.Text;
                            TempKey = TempKey.Substring(0, TempKey.Length - 2);
                            Content.Add(TempKey, ContentTable.Cell(j, 2).Range);
                        }
                        //перебор всех вопросов
                        for (int i = 2; i < QuestionsTable.Rows.Count + 1; i++)
                        {
                            MessageBox.Show("\n\n\tВносим изменения...\t\n\n", "Уведомление", MessageBoxButtons.OK, MessageBoxIcon.Information);
 
                            string TempQuestionInCell = QuestionsTable.Cell(i, 2).Range.Text;
                            TempQuestionInCell = '<' + TempQuestionInCell + '>';
                            //перебор всех тегов
                            foreach (string item in Content.Keys)
                            {
                                //если тег есть в тексте
                                if (TempQuestionInCell.Contains(item))
                                {
                                    //пока что проверяем первое вхождение
                                    int InsertIndex = TempQuestionInCell.IndexOf(item);
                                    /**********************************************************
                                     тут необходимо реализовать вставку содержимого со словаря
                                    **********************************************************/
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception f)
            {
                result.Error = TypeError.ErrorInWorkWithWordApp;
                MessageBox.Show(f.Message);
            }
            finally
            {
                WordApp.Quit();
            }
 
            return result;
        }
Ответ: Каким образом возможно это реализовать? Опыта работы с данной библиотекой особо нет. В скриншотах указан исходный документ и тот, который должен получиться после выполнения программы.
Вопрос: Удаление и копирование части текста до слова

1) Как можно удалить часть текста, до определенного слова?
До первого вхождения? До последнего вхождения?

Например: "На траве дрова, на горе сова. На дворе трава, а в пруду ква-ква ."
Удалить до слова "На".
Получим
" траве дрова, на горе сова. На дворе трава, а в пруду ква-ква ." - первое вхождение.
" дворе трава, а в пруду ква-ква ." - последнее вхождение.


2) Как можно скопировать часть текста, до определенного слова?
До первого вхождения? До последнего вхождения?

Например: "На траве дрова, на горе дрова. А в пруду ква-ква ."
Скопировать до слова "дрова".
Получим
"На траве " - первое вхождение.
"На траве дрова, на горе дрова" - последнее вхождение.
Ответ:
Сообщение от cyberf
1) Как можно удалить часть текста, до определенного слова?
До первого вхождения? До последнего вхождения?
Регулярка:
^ начало строки текста
$ конец строки текста
Отталкивайся от них! Плюс немного дополнительного кода и твоя задача решится.

Сообщение от cyberf
2) Как можно скопировать часть текста, до определенного слова?
До первого вхождения? До последнего вхождения?
Шаблон: как базовое слово (набор символов) в нем дрова обознач.

Ну и главное для полного успеха решения задач держи!

Вопрос: Форматирование текста в ячейке таблицы Word

День добрый!
Пробую форматировать часть текста в ячейке таблицы Word 2007 таким образом:

            
wdTable.Cell(iRow + iEdge, iCol).Range.InsertAfter(stPart);

WordApp.Selection.MoveRight(wdCharacter, arrSymPositions[k].Pos + 2);
WordApp.Selection.MoveRight(wdCharacter, 1, wdExtend);
WordApp.Selection.Font.Name := arrSymPositions[k].Font;

Но этот код работает нестабильно, возможно из-за того, что положение курсора после InsertAfter неопределено.
Пробовал устанавливать курсор выделения с помощью комбинаций команд
WordApp.Selection.MoveRight(wdTable, ... и
WordApp.Selection.MoveRight(wdCell, ...
но и здесь Word себя ведёт непредсказуемо.

Если кто-то занимался чем-то подобным, выложите плиз рабочие куски кода.
Или может быть есть другой способ отформатировать кусок текста в ячейке кроме объекта Selection?
Ответ: Нашёл другой вариант)

// перемещение курсора в начало ячейки              
aRange := wrTable.Cell(1,k).Range;
aRange.Select;
WordApp.Selection.Collapse(wdCollapseStart);
// выделение и форматирование
WordApp.Selection.MoveRight(wdCharacter, arrSymPositionsPos - 1);
WordApp.Selection.MoveRight(wdCharacter, 1, wdExtend);
WordApp.Selection.Font.Name := arrSymPositions[k].Font;
Вопрос: Изменить цвет части текста в строковой переменной

Добрый вечер.

Вопрос в самой теме. Как изменить цвет части текста, который находится в строковой перменной (объекте). Ну и потом вывести его в ячейку.
У меня никак не получилось. Возможно это не возможно.

Код Visual Basic
1
2
3
4
5
6
7
8
9
Sub borger()
 
Dim mat As Range
Set mat = Cells(1, 1)
 
mat.Characters.Font.ColorIndex = 5
 
Cells(1, 2) = Cells(1, 1) & mat
End Sub
Ответ: Нет, передать форматирование не получится. Только после формирования текста внутри ячейки можно применить формат к элементам этого текста.
Вопрос: Преобразование текста в ячейке Excel 2007, копирование части текста в другую ячейку.

Добрый день! Прошу помочь в следующем вопросе: при обработке таблицы есть необходимость копировать часть текста, которая расположена между символами.
Например:
_пистон потолка! преобразовать в пистон потолка

полный текст в ячейке:
30786ASAM_пистон потолка!\ Renault Logan/Sandero 1.4/1.6/1.5DCi 04>
или из текста
30789ASAM_клипса бампера! 10шт\ Renault Logan/Sandero 1.4/1.6/1.5DCi 04>
получить:
клипса бампера! 10шт
а еще лучше:
клипса бампера 10шт
Текст в данном случае находится между символами _ и \
могут быть и другие символы (разделители)
Прошу учесть, что я не программист.
В инструментах текстовых формул решения не нашёл. В форуме встречал, что нужно создавать функцию для решения этой задачи.

Заранее спасибо за помощь

К сообщению приложен файл (ШАБЛОН 102 25.02.2017.xlsx - 141Kb)
Ответ: The_Prist,

Добрый вечер,

подскажите пожалуйста где можно почитать о применении текстовых функций и создании объединённых вариантов из двух или нескольких функций.
Например, как в одной ячейке применив функцию ПОДСТАВИТЬ назначить не один вариант старого текста, а два и подставить один вариант нового текста.
Конечно эту задачу можно сделать пошагово, но если возможно иметь несколько аргументов, то можнорешать преобразование быстрее.
Вопрос: C++ Builder. OLE Word. Направление текста в таблице справа налево для иврита

Здравствуйте.
Как сделать для ячейки таблицы направление текста справа налево для иврита.
Ответ: volvo, подскажи пожалуйста как мне сделать форматирование параграфа с помощью
C++
1
OleProcedure( "RtlPara" )
Добавлено через 1 час 47 минут
Разобрался,


C++
1
2
3
4
5
6
vVarParagraphs = vVarDoc.OlePropertyGet("Paragraphs");
....;
vVarParagraphs.OleProcedure( "Add" );
vVarParagraph = vVarParagraphs.OleFunction( "Item", 12 );
vVarParagraph.OlePropertyGet( "Range" ).OleFunction( "Select" );
Word.OlePropertyGet( "Selection" ).OleProcedure( "RtlPara" );
Вопрос: Условное форматирование для несмежных ячеек

Добрый день!

Есть полотно в Excel - содержащее колонку из 5000 тыс. записей, нужно создать правило условного форматирования, для несмежных ячеек этой колонки (для каждой 12-ой - например). Чтобы не выделять их все применяя ctrl...
Еще - для каждой 12 ячейки в другой колонке стоит признак "1".
Ответ: lewer777,
Если есть желание именно условный формат назначить на каждой 12-ой строке, то пользуй VBA.

Ну, а если таки просто условие условного форматирования сделать зависимым от номера строки, то как-то так:
И(ОСТАТ(СТРОКА(A1);12)=0;ТВОЕ_УСЛОВИЕ)
Вопрос: Добавление текста в ячейку таблицы с помощью PHPword

Здравствуйте.

Добавляю в ячейку таблицы текст с помощью phpword:

Код:

$table 
= $section->addTable(array('borderSize'=>0, 'borderColor'=>'ffffff', 'cellMargin'=>0), array('bgColor'=>'ffffff'));
// Add row
$table->addRow();
// Add cells
$table->addCell(700)->addText('Ячейка1 ', 0, array('align'=>'left'));
$table_run=$table->addCell(9500);
$table_run->addText('Текст в ячейке2 ', array('name'=>'Cambria','size'=>11));
$table_run->addText('ЖИРНЫЙ ШРИФТ', array('bold' => true,'name'=>'Cambria','size'=>11));
 


куски текста в ячейке2 разные по стилю, но почему то текст 'Текст в ячейке2 ' остается на месте, а кусок строки 'ЖИРНЫЙ ШРИФТ' переноситься на следующую строчку.

Как сделать чтобы текст 'ЖИРНЫЙ ШРИФТ' не переносился на следующую строчку?
Ответ: все разобрался. забыл что надо использовать addTextRun

так работает:
Код:

$table
->addCell(700)->addText('Ячейка1 ', 0, array('align'=>'left'));
$ntt=$table->addCell(9500);
$table_run=$ntt->addTextRun();
$table_run->addText('Текст в ячейке2 ', array('name'=>'Cambria','size'=>11));
$table_run->addText('ЖИРНЫЙ ШРИФТ', array('bold' => true,'name'=>'Cambria','size'=>11));


спасибо!)
Вопрос: Перенос данных при совпадении части текста ячеек

Ребята, подскажите пожалуйста можно-ли средствами VBA провести следующую операцию. В таблице на листе 1 в первом столбце указана марка бетона нужно найти соответствующую марку во второй таблице в столбце 2 и перенести значения этой строки нат первый лист. Правда есть загвоздка: Марка бетона сравнивается не целиком а по первым пяти символам. Например В25П4 остальные цифры не важны. Т.е данные копировать при нахождении первого совпадения.Еще одна сложность: в названии бетона второго листа вставлены данные в скобках, которые мешают сравнению. Например В25(М350)П4. Можно ли их как нибудь убрать, потом провести сравнение и перенос данных на лист один, а затем вернуть оригинальное название.
Ответ:
При переходе на VBA проблемы останутся.
Ну, естественно, что если нет соответствия, то проблемы останутся.
И, в принципе, нет большой разницы макросом делать или UDF или стандартными формулами.
Просто иногда написать UDF бывает проще чем собрать нужный функционал из стандартных функций.
А макросы хороши при больших объёмах данных когда обилие формул начинает вызывать тормоза.