Проблема с шириной столбца таблицы Word

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Проблема с шириной столбца таблицы Word

Сообщение vatnick » 24.03.2010 (Ср) 0:09

Добрый вечер. Недавно столкнулся с проблемой назначения ширины столбца в таблице word :? .
Я работаю в Visual Basic 2008 express edition, использую Microsoft Word 11.0 Object Library для соединения с Word. Создаю документ, таблицу, начинаю назначать ширину столбцам. Все, вроде, нормально, но как только подходит момент обработать очередной столбец (сузить до 3 мм = 8,5 point) программа тут же выдает ошибку ("COMException was unhandled. Значение лежит вне допустимого диапазона."). Причем, как я уже проанализировал, "допустимый диапазон" начинается с 11 пунктов (3.88 мм), но почему? Почему? Если я тупо захожу в Word, кликая мышкой, и создав таблицу, могу задать ширину столбца или любой ячейки равной, даже 0,1 мм . Помогите пожалуйста. Может решение лежит под носом, а я его не вижу? Или какие-нибудь есть скрытые нюансы ? Заранее спасибо.
Вот фрагмент кода:
"
Код: Выделить всё
Private Sub CreateTable(ByVal w As Microsoft.Office.Interop.Word.Document, ByVal r As Microsoft.Office.Interop.Word.Range)
        Dim strok As Short = 21 '  Количество строк в таблице
        Dim stolb As Short = 18 '   Количество столбцов в таблице
        Dim m As Single = 2.834645669213 '  Количество поинтов в миллиметре
        w.Tables.Add(w.Paragraphs.Item(w.Paragraphs.Count).Range, strok, stolb) ' Добавляем таблицу в документ
        Dim iMax As Integer = w.Tables.Count ' Номер последней таблицы
        w.Tables.Item(iMax).LeftPadding = 0                                                                             
        w.Tables.Item(iMax).RightPadding = 0
        w.Tables.Item(iMax).TopPadding = 0
        w.Tables.Item(iMax).BottomPadding = 0
        w.Tables.Item(iMax).Columns(1).Cells.Width = 5 * m '  Начинаем задавать ширину столбцам
        w.Tables.Item(iMax).Columns(2).Cells.Width = 7 * m
        w.Tables.Item(iMax).Columns(3).Cells.Width = 7 * m
        w.Tables.Item(iMax).Columns(4).Cells.Width = 10 * m
        w.Tables.Item(iMax).Columns(5).Cells.Width = 3 * m ' <--- Вот эта строка, тут все обрывается :(
        w.Tables.Item(iMax).Columns(6).Cells.Width = 23 * m
        w.Tables.Item(iMax).Columns(7).Cells.Width = 15 * m
        w.Tables.Item(iMax).Columns(8).Cells.Width = 10 * m
        w.Tables.Item(iMax).Columns(9).Cells.Width = 25 * m
        w.Tables.Item(iMax).Columns(10).Cells.Width = 5 * m
        w.Tables.Item(iMax).Columns(11).Cells.Width = 20 * m
        w.Tables.Item(iMax).Columns(12).Cells.Width = 20 * m
        w.Tables.Item(iMax).Columns(13).Cells.Width = 5 * m
        w.Tables.Item(iMax).Columns(14).Cells.Width = 5 * m
        w.Tables.Item(iMax).Columns(15).Cells.Width = 5 * m
        w.Tables.Item(iMax).Columns(16).Cells.Width = 10 * m
        w.Tables.Item(iMax).Columns(17).Cells.Width = 5 * m
        w.Tables.Item(iMax).Columns(18).Cells.Width = 20 * m
        w.Range.InsertParagraphAfter()
End Sub
"

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Проблема с шириной столбца таблицы Word

Сообщение viter.alex » 24.03.2010 (Ср) 14:43

Перед установкой ширины столбца, нужно задать правило, по которому она вычисляется:
Код: Выделить всё
w.Tables.Item(iMax).Columns.PreferredWidthType=wdPreferredWidthPoints

Миллиметры в поинты переводятся функцией MillimetersToPoints. Её можно вызвать так:
Код: Выделить всё
w.Application.MillimetersToPoints()
Лучше день потерять — потом за пять минут долететь!

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Re: Проблема с шириной столбца таблицы Word

Сообщение vatnick » 25.03.2010 (Чт) 21:54

Спасибо за советы. Сделал все как сказали, но ошибка осталась. :cry: . Что после такого кода
Код: Выделить всё
w.Tables.Item(iMax).Columns.PreferredWidthType = Microsoft.Office.Interop.Word.WdPreferredWidthType.wdPreferredWidthPoints
w.Tables.Item(iMax).Columns(5).Cells.Width = w.Application.MillimetersToPoints(3)

что без него - к сожалению одно и тоже.
Мне уже кажется, что эту ошибку не убрать вообще, потому что это ограничение связано с возможностями Microsoft Word 11.0 Object Library.
Неужели придется менять намеченный план :x ?
Последний раз редактировалось vatnick 25.03.2010 (Чт) 22:00, всего редактировалось 1 раз.

Emzari
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 129
Зарегистрирован: 06.09.2002 (Пт) 9:08
Откуда: Georgia

Re: Проблема с шириной столбца таблицы Word

Сообщение Emzari » 25.03.2010 (Чт) 21:59

а собственно зачем тебе требуется столбец в 3 мм ширину в него вед нормально текст не поместится

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Re: Проблема с шириной столбца таблицы Word

Сообщение vatnick » 25.03.2010 (Чт) 22:25

Дело тут в том, что я создаю форматку для текстового конструкторского документа, у которого ширина столбцов и строк определена нормативными документами. Вы мне скажете, что там и нет такого столбца шириной в 3 мм. Да нет, но тут вступает в силу специфика создания таблицы в Word. Там же нельзя создать таблицу у которой, допустим, в первой строке 2 ячейки, во второй строке 3 ячейки (типа как кирпичная стена), а общее количество столбцов не равно 5. Т.е., создавая таблицу, вначале нужно задать общее количество столбцов и строк, далее назначить для них ширины и высоты, а потом объединять нужные ячейки. Отсюда и проблема. Сам столбец в 3 мм. использоваться не будет, будут использоваться его левые и правые стороны.

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Проблема с шириной столбца таблицы Word

Сообщение viter.alex » 25.03.2010 (Чт) 23:44

Я понял! У ячеек этого столбца нужно убрать правые и левые границы. Ширина столбца не может быть меньше, чем сумма правого и левого отступа для текста. Т.е.
Код: Выделить всё
For Each oCell As Word.Cell In w.Tables.Item(iMax).Columns(5).Cells
  oCell.RightPadding = 0
  oCell.LeftPadding = 0
Next

А уже потом задавать ширину столбца.
И почему это нельзя сделать "кирпичную стену"? Разбиение ячеек ещё никто не отменял
Лучше день потерять — потом за пять минут долететь!

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Re: Проблема с шириной столбца таблицы Word

Сообщение vatnick » 26.03.2010 (Пт) 0:06

Не выходит :shock: опять все таже ошибка. А у Вас, что заработало? :?:

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Re: Проблема с шириной столбца таблицы Word

Сообщение vatnick » 26.03.2010 (Пт) 0:37

Кирпичную стену создать можно, но после разбиения, когда нужно будет задать для них нужные ширину и высоту начнется "непонятный геморой" :D

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Проблема с шириной столбца таблицы Word

Сообщение viter.alex » 26.03.2010 (Пт) 9:24

Конечно, заработало. Я бы не говорил, если бы не работало:
Код: Выделить всё
Imports Microsoft.Office.Interop.Word
Imports Microsoft.Office.Interop
Module Module1

  Sub Main()
    Dim wdApp As New Word.Application
    Dim wdDoc As Word.Document
    Dim Tbl As Word.Table
    wdDoc = wdApp.Documents.Add()
    Tbl = wdDoc.Tables.Add(wdDoc.Application.Selection.Range, 5, 5)
    For Each ocell As Word.Cell In Tbl.Columns(3).Cells
      ocell.RightPadding = 0
      ocell.LeftPadding = 0
    Next
    With Tbl.Columns(3)
      .PreferredWidthType = WdPreferredWidthType.wdPreferredWidthPoints
      .PreferredWidth = wdApp.MillimetersToPoints(3)
    End With
    wdApp.Visible = True
    wdDoc = Nothing : wdApp = Nothing
  End Sub

End Module

И вот результат:
Изображение
Лучше день потерять — потом за пять минут долететь!

vatnick
Начинающий
Начинающий
Аватара пользователя
 
Сообщения: 6
Зарегистрирован: 23.03.2010 (Вт) 22:44

Re: Проблема с шириной столбца таблицы Word

Сообщение vatnick » 26.03.2010 (Пт) 23:16

Спасибо огромное за подробное объяснение. :P Теперь можно сказать, что проблема с шириной столбца таблицы Word окончательно и бесповоротно РЕШЕНА. :alien: Я понял, моя ошибка заключалась в том, что я задавал ширину столбца неправильно.
Я делал так:
"w.Tables.Item(iMax).Columns(5).Cells.Width = 3 * m",
а надо было так:
"w.Tables.Item(iMax).Columns(5).PreferredWidth= 3 * m"
Еще раз спасибо. Всем удачи!!!


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 18

    TopList