|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » .NET - [решено] Проход по строкам таблицы с объединенными ячейками |
|
.NET - [решено] Проход по строкам таблицы с объединенными ячейками
|
Старожил Сообщения: 251 |
Программа
using System; using System.Configuration; using Word = Microsoft.Office.Interop.Word; using System.Collections.Generic; using System.IO; using System.Configuration; namespace CsWordCons { class Program { static void GetFindString(int numRowBegin, int numCol) { string cyrDir = Environment.CurrentDirectory; string[] strDocFileName = Directory.GetFiles(cyrDir, "*.do*", SearchOption.AllDirectories); if (strDocFileName.Length > 1) { Console.WriteLine("Рядом с программой должен быть один файл с расширением doc или docx!"); Console.ReadKey(); Environment.Exit(1); } Object missing = System.Reflection.Missing.Value; Object confConv = false; Object readOnly = true; Object isVisible = false; Object saveChanges = false; Object filename = strDocFileName[0]; Word.Application word = new Word.Application(); Word.Document doc = new Word.Document(); doc = word.Documents.Open(ref filename, ref confConv, ref readOnly); word.Visible = false; Word.Table tbl = null; try { tbl = doc.Tables[1]; } catch (Exception ex) { Console.WriteLine("В документе " + strDocFileName[0] + " нет таблиц!"); ((Word._Document)doc).Close(ref saveChanges, missing, missing); ((Word._Application)word).Quit(ref saveChanges); Console.ReadKey(); Environment.Exit(1); } int numRows = tbl.Rows.Count; List<string> strListFind = new List<string>(); for (int i = numRowBegin; i <= numRows; i++) { string[] strOnlyFind = tbl.Cell(i, numCol).Range.Text.Split('\r'); foreach (string str in strOnlyFind) { if (str.Length > 2) strListFind.Add(str.Trim()); } } Console.WriteLine("Будет проведен поиск следующих серийных номеров:"); foreach (string str in strListFind) Console.WriteLine(str); Console.WriteLine("---------------------------------------------"); Console.WriteLine("Нажмите любую клавишу для поиска.\nЕсли серийные номера определены неправильно - проверьте\n" + "данные в конфигурационном файле"); Console.ReadKey(); ((Word._Document)doc).Close(ref saveChanges, missing, missing); ((Word._Application)word).Quit(ref saveChanges); } // GetFindString static void Main(string[] args) { Configuration config = ConfigurationManager.OpenExeConfiguration("CsWordCons.exe"); string[] allKeys = config.AppSettings.Settings.AllKeys; int numKeys = allKeys.Length; string strNumRowBegin = config.AppSettings.Settings[allKeys[0]].Value; string strNumCol = config.AppSettings.Settings[allKeys[1]].Value; string strResultFileName = config.AppSettings.Settings[allKeys[numKeys - 1]].Value; GetFindString(int.Parse(strNumRowBegin), int.Parse(strNumCol)); Console.ReadKey(); } // Main } //class Program } // namespace CsWordCons Подскажите, пожалуйста, как: - перемещаться по строкам таблицы; - определить, что в строке объединены ячейки. Проект прикрепил. |
|
Отправлено: 21:49, 23-04-2018 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата tumanovalex:
Скрытый текст
Судя по Directory.GetFiles Method (String, String, SearchOption) (System.IO):
Цитата:
Мне не очень понятно, чего Вы хотите добиться в целом этим: У меня нет С++, но в VBA аналогичный оператор Split(tbl.Cell(…, …).Range.Text, vbCr) на Вашем документе не вызывает ошибки, независимо от того, объединённая ячейка, или нет. Какая именно ошибка возникает — Вы не указали, но, полагаю, что это ошибка адресации: например, Вы пытаетесь обратиться к несуществующему в таблице четвёртому столбцу второй (четвёртой, шестой) строки. Цитата tumanovalex:
Цитата tumanovalex:
Скрытый текст
![]() |
||||
Отправлено: 22:38, 23-04-2018 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 251
|
Профиль | Отправить PM | Цитировать Дело в том, что я получаю исключение из-за разного количества ячеек в разных строках
|
Отправлено: 21:02, 25-04-2018 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата tumanovalex:
Цитата Iska:
|
||
Отправлено: 21:06, 25-04-2018 | #4 |
Старожил Сообщения: 251
|
Профиль | Отправить PM | Цитировать Извините, невнимательно прочитал.
foreach(var rTable in tbl.Rows) ошибки не дает, но не понятно, что с этим делать. Было бы здорово, если бы можно было определить, как у Вас в коде, количество ячеек в rTable, но в C# у rTable, в отличие от VB, нет нужного метода. |
|
Отправлено: 21:25, 25-04-2018 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата tumanovalex:
![]() Вы у себя в коде перебираете с указанного номера строки до последней: — вот и вся разница. Кстати, для чего — именно с указанного номера строки, а не все зараз, с первой и по последнюю? Цитата tumanovalex:
У объекта Table (Table Interface (Microsoft.Office.Interop.Word)) есть (Table Members (Microsoft.Office.Interop.Word)) свойство .Rows (Table.Rows Property (Microsoft.Office.Interop.Word)), возвращающее коллекцию (Rows Interface (Microsoft.Office.Interop.Word)) из объектов Row (Row Interface (Microsoft.Office.Interop.Word)), каждый из которых имеет свойство .Cells (Row.Cells Property (Microsoft.Office.Interop.Word)), возвращающее коллекцию (Cells Interface (Microsoft.Office.Interop.Word)) из объектов Cell (Cell Interface (Microsoft.Office.Interop.Word)). Эта коллекция, как и любая другая, имеет свойство .Count (Cells.Count Property (Microsoft.Office.Interop.Word)). |
||
Отправлено: 01:29, 26-04-2018 | #6 |
Старожил Сообщения: 251
|
Профиль | Отправить PM | Цитировать Спасибо большое. Удалось разобраться. Получилось определить число ячеек в строке
|
Отправлено: 19:20, 26-04-2018 | #7 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] разбить по строкам txt | shadowbat | Скриптовые языки администрирования Windows | 54 | 10-11-2015 16:20 | |
Удаление записей таблицы по данным другой таблицы | xNiSSaNx | Вебмастеру | 4 | 02-08-2013 21:58 | |
2007 - Создание таблицы с защищенными ячейками (Excel 2007) v2 | -KeyMaster- | Microsoft Office (Word, Excel, Outlook и т.д.) | 6 | 14-06-2012 16:11 | |
2007 - [решено] Создание таблицы с защищенными ячейками (Excel 2007) | -KeyMaster- | Microsoft Office (Word, Excel, Outlook и т.д.) | 5 | 07-06-2012 17:16 | |
Shell. Чтение текстового файла по строкам. | Delphin911 | Общий по Linux | 11 | 07-04-2005 17:58 |
|