Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Программирование (VB,C#,ASP,.NET): новости, советы, примеры


Выпуск # 735

Друзья! Прошло совсем мало времени с момент последнего выпуска, и вот уже новый! Удивительно, как быстро летит время в Интернете, сколько всего нового происходит ежедневно, да что там, ежесекундно. И Kbyte.Ru в этом плане не исключение, на сайте столько всего произошло, столько всего, что многое даже и не влезло в этот выпуск! И кто только придумал ограничения скорости интернет-соединения и объемов писем! Эх..., благо на сайте есть живая лента событий, которая не даст потеряться среди гущи событий.
Надеюсь, этот выпуск будет интересен для вас. Если вы хотите увидеть в следующих выпусках что-то конкретное, напишите мне об этом на ящик subscribe@kbyte.ru.


Содержание выпуска

Читайте в этом выпуске:

Если у вас есть вопросы по программированию или работе с компьютером, не стесняйтесь, спрашивайте.

Форумы Kbyte.Ru

На форумах Kbyte.Ru постоянно появляются новые интересные темы и обсуждения. В этом выпуске представлены лишь новые темы, с момента прошлой рассылки.

Кстати, любой желающий может на форумах Kbyte.Ru совершенно свободно получить помощь грамотных специалистов в области программирования, да и в целом информационных технологий.

Задать свой вопрос прямо сейчас

"Собрал" приборчик для перевода чисел.
Посоветуйте что еще добавить?

[- к содержанию -]

Необходимо чтобы можно было забрасывать в Word 2007 (и выше) формулы (в режиме редактора формул) матрицы и системы уравнений также как это можно сделать на VBA (не используя шаблоны т.к. каждый раз будет ход решения меняться) вот пример кода макроса:

Sub ЧЕТЫРЕ_МАТРИЦА()
'
'
'ВКЛЮЧЕНИЕ РЕЖИМА ФОРМУЛ
    Selection.OMaths.Add Range:=Selection.Range
    
'СОЗДАЕМ ПРЯМЫЕ СКОБКИ
    With Selection.OMaths(1).Functions.Add(Selection.Range, _
        wdOMathFunctionDelim, 1)
        .Delim.BegChar = 124
        .Delim.SepChar = 0
        .Delim.EndChar = 124
        .Delim.Grow = True
        .Delim.Shape = wdOMathShapeCentered
    End With


'ДЕЛАЕМ 1 ШАГ НАЗАД
    Selection.MoveLeft Unit:=wdCharacter, Count:=1
    
    
'СОЗДАЕМ МАТРИЦУ 4Х4
    Selection.OMaths(1).Functions.Add(Selection.Range, wdOMathFunctionMat, 16, _
        4).Mat.PlcHoldHidden = False
    Selection.MoveLeft Unit:=wdCharacter, Count:=17
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="1"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="2"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="3"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="4"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="5"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="6"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="7"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="8"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="9"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="10"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="11"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="12"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="13"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="14"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="15"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="16"
    Selection.MoveRight Unit:=wdCharacter, Count:=2
    
    
'СТАВИМ ЗНАК РАВЕНСТВА
    Selection.TypeText Text:="="
    Selection.MoveRight Unit:=wdCharacter, Count:=1
        
        
'СТАВИМ СТЕПЕННУЮ ФУНКЦИЮ
    Selection.OMaths(1).Functions.Add Range:=Selection.Range, Type:= _
        wdOMathFunctionScrSup
    Selection.MoveLeft Unit:=wdCharacter, Count:=2
    Selection.TypeText Text:="2"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    Selection.TypeText Text:="3"
    Selection.MoveRight Unit:=wdCharacter, Count:=1
    

    
    
    Selection.TypeParagraph
    Selection.TypeParagraph
    Selection.TypeParagraph
End Sub

[- к содержанию -]

Ответ #1 @Алексей Немиро 11.07.2013 20:51
Создавать дубликаты необязательно, все все видели с первого раза. :)
в режиме редактора формул
Ни о чем не говорит.
также как это можно сделать на VBA
А чем не устраивает VBA?
не используя шаблоны т.к. каждый раз будет ход решения меняться
1. Что есть шаблон по общему определению?
2. Если шаблон - это образец документа, имеющий общий формат и структуру, предоставляющий возможность динамично изменять отдельные его элементы, в зависимости от стоящих задач, то что означает "каждый раз будет ход решения меняться"?
вот пример кода макроса
Код ни о чем не говорит.

[- к содержанию -]

Ответ #2 @Алексей 11.07.2013 21:38
Хочется создать автономную программу со своими наворотами, а в VBA мне так кажется этого не получится!
Скажите пожалуйста, а Вы можете для примера написать любую примитивную программу чтобы она могла забрасывать в ворд формулы (матрицы и системы уравнений, любым методом на ваше усмотрение)? а я дальше уже буду с ней разбираться!

[- к содержанию -]

Добавить свой ответ в эту тему
ПЛЮС @i32 11.07.2013 18:03
День добрый..Возник вопрос такой..Отловил значение спомощью регулярных выр.
Но дело в том ,что не скопировались + а вместо плюсов сделался перенос строк..
Пример..
MyuZyVYhxfCXgaDmd+LB23leFUB6VXun
Так нужно.
А вышло..
MyuZyVYhxfCXgaDmd
LB23leFUB6VXun
Регулярка..
 Dim m1245 As Match = Regex.Match(soq11, "var recaptcha_control_field = '(?<Bllw>.*?)\x27;")
        MsgBox(m1245.Groups("Bllw").Value)
Спасибо..

[- к содержанию -]

Ответ #1 @Алексей Немиро 11.07.2013 20:58
Плюс не может меняться на перевод строки :)

Регулярки тут особо не помогут, нужно Replace делать. Хотя можно и регулякой:
MsgBox(Regex.Replace(m1245.Groups("Bllw").Value, "\s+", "+"))

[- к содержанию -]

Добавить свой ответ в эту тему
Привет всем!!!
Как запретить использование usb модема.
Спасибо!!!

[- к содержанию -]

Как выделить определенную часть экрана которая выделяется выделением как в ФШ, и после чего производился скрин этой области?

[- к содержанию -]

Ответ #1 @Алексей Немиро 10.07.2013 18:51
Хитрый стрелок экранов отвечает на этот вопрос в полной мере :) Я его для этого и делал.

[- к содержанию -]

Трейнер @Crash666 10.07.2013 06:03
Здравствуйте, как можно написать трейнер на VB.net? допустим для приложения "калькулятор" установить свою значение нажатием на кнопку на форме?

[- к содержанию -]

Ответ #1 @Crash666 11.07.2013 13:54
Ответ #2 @Алексей Немиро 11.07.2013 21:09
Найти окно, найти объект, ввести данные.
Использовать API.

Давным-давно делал пример на Visual Basic 6.0:
http://kbyte.ru/ru/Expert/Show.aspx?id=358
http://kbyte.ru/ru/Expert/Show.aspx?id=364

На .NET лень делать.

[- к содержанию -]

Ответ #3 @[i]Pro 12.07.2013 02:19
Писал лет сто назад для сапёра (Win 7), чисто для саморазвития, исходник остался, если интересно...

[- к содержанию -]

Добавить свой ответ в эту тему
Среда Visual Basic STUDIO’2010 Professional
Удалить индексный файл "myIdx2" предварительно проверив его существование
в базе Microsoft SQL Server.

Апробировано 13 вариантов, все неправильные:

Try
            ''+-1 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.tablename') AND NAME ='indexname') BEGIN" + vbCrLf +
            '"DROP INDEX myIdx2 ON SCHEMA.MyTable;END;" ' можно поставить перед Try
            '' Неправильный синтаксис около ключевого слова "SCHEMA".

            ''+-2 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN" + vbCrLf +
            '"DROP INDEX myIdx2 ON SCHEMA.MyTable;END;" ' можно поставить перед Try
            '' Неправильный синтаксис около ключевого слова "SCHEMA".

            ''+-3 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON SCHEMA.MyTable;END;" ' можно поставить перед Try
            '' Неправильный синтаксис около ключевого слова "SCHEMA".

            ''+-4 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' можно поставить перед Try
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!


            ''+-5 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN" + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;"
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            ' ''+-6 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' после BEGIN пробел ставлю
            ' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            ''+-7 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN:" + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' после BEGIN двоеточие ставлю
            'Неправильный синтаксис около конструкции ":". Неправильный синтаксис около конструкции ";".

            ''+-8 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='schema.myIdx2') BEGIN" + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;"
            ' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            ' ''+-9 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='schema.myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' после BEGIN пробел ставлю
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            ' ''+-10 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='schema.myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END" ' после END убираю точку с запятой 
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            '' ''+-11 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='schema.myIdx2') BEGIN; " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' после END поставил точку с запятой 
            '' после  BEGIN; поставил точку с запятой 
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            '' ''+-12 
            'Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='myIdx2') BEGIN " + vbCrLf +
            '"DROP INDEX myIdx2 ON MyTable;END;" ' после END поставил точку с запятой 
            '' после  BEGIN убрал поставленную точку с запятой 
            '' ошибки нет, НО НЕ УДАЛЁН ИНДЕКС!

            ' ''+-13
            Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.MyTable') AND NAME ='schema.myIdx22') BEGIN " + vbCrLf +
            "DROP INDEX myIdx2 ON MyTable;END;" ' перед "myIdx2" поставил schema
            ' ошибки нет, НО НЕ выведено сообщения об отсутствии файла myIdx22!

            'код, который может привести к ошибке  
            'выполнение программы будет продолжено без ошибок  

            '     Dim sql3 As String = "IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('schema.tablename') AND NAME ='indexname') BEGIN" + vbCrLf +
            '"DROP INDEX PKeyMyId ON SCHEMA.MyTable;END;"
            '+-1 Ссылка на объект не указывает на экземпляр объекта.
            ' я хотел удалить индекс "PKeyMyId"
            ' PKeyMyId
            '+-2 Неправильный синтаксис около ключевого слова "SCHEMA".

            ExecuteSQLStmt(sql3) 
	Catch ex As Exception
		MsgBox("индекс myIdx2 НЕ существует" & vbCrLf & ex.Message)
        End Try
СПАСИБО!
Порикрепить myIdx2_GIF.GIF
/////////////////////////////////////////////////////// 

////////////////////////////////// 
Тема_2:   заполнение DGV  из представления  "myView"
Среда  Visual Basic  STUDIO’2010 Professional
Тип базы данных - Microsoft SQL Server 
Почему ранее созданное представления "myView" не заполняет DataGridView1?
. . . . . . . . . . . . . .
conn.Open()
' Create a data adapter
Dim da As New SqlDataAdapter("SELECT * FROM myView", conn) 
Dim ds As New DataSet
da.Fill(ds) 
DataGridView1.DataSource = ds.DefaultViewManager 
'++- DataGridView1.Update() ' не показывает содержимое DataGridView1
MsgBox("Доходит сюда")
PS: myView в среде Studio'2010 в окне Обозреватель серверов РАБОТАЕТ.

' второй вариант 
 conn.Open()
 ' Create a data adapter
 Dim da2 As New SqlDataAdapter("myView", conn)
 ' Create DataSet, fill it and view in data grid
 Dim ds2 As New DataSet("myView")
 '+-1 da2.Fill(ds2, "myView") ' Выполнение запроса процедура "myView" окончилось 
 ' неудачно, так как "myView" является объектом представление.

 da2.Fill(ds2) ' Выполнение запроса процедура "myView" окончилось 
 ' неудачно, так как "myView" является объектом представление.
СПАСИБО!

[- к содержанию -]

Ответ #1 @Алексей Немиро 09.07.2013 13:26
Запрос вернет список индексов:
SELECT * FROM sys.indexes

Следующий запрос вернет идентификатор объекта schema.MyTable, который необходим для выборки индексов конкретной таблицы при помощи выше указанного запроса (см. на имена и значения полей, которые возвращает вышеуказанный запрос):
SELECT object_id('schema.MyTable')
Если результат NULL, значит объект не существует. Учитывая, что в коде практически везде указано schema.tablename и schema.MyTable, то вероятно, функция object_id всегда будет возвращать NULL.

Вместо schema нужно писать имя схемы. По умолчанию - dbo.
Вместо MyTable или tablename, нужно писать имя таблицы. Схему можно не указывать, а просто указать имя таблицы:
SELECT object_id('MyTable')
ВМЕСТО MyTable НУЖНО УКАЗАТЬ ИМЯ ТАБЛИЦЫ!

Ниже следующий код вернет "индекс существует", если в таблице "ИМЯ ТАБЛИЦЫ" есть индекс "ИМЯ ИНДЕКСА":
IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('ИМЯ ТАБЛИЦЫ') AND NAME ='ИМЯ ИНДЕКСА') BEGIN
	PRINT 'индекс существует!'
END


И соответственно, если у учетной записи, под которой выполняется запрос есть права на удаление индексов, можно удалить индекс:
IF EXISTS(SELECT * FROM sys.indexes WHERE object_id = object_id('ИМЯ ТАБЛИЦЫ')
AND NAME ='ИМЯ ИНДЕКСА') BEGIN
   DROP INDEX [ИМЯ ИНДЕКСА] ON [ИМЯ ТАБЛИЦЫ];
END
Если прав нет, то либо будет ошибка, либо ничего не произойдет.

Вся описанная выше схема построена на основе представленного кода. Это метод поиска проблемы.

На скрине я вижу Visual Studio. Возможности встроенных инструментов для работы с SQL Server очень ограничены. Лучше использовать Microsoft SQL Server Management Studio (Express версия - бесплатная).

Скрины можно добавлять прямо в текст, для этого достаточно нажать на кнопку "добавить картинку" вверху редактора, рядом со смайликом:

'++- DataGridView1.Update() ' не показывает содержимое DataGridView1
Достаточно поставить брейкпоинт (точку останова) и посмотреть, что содержится в переменной ds. Если данные есть, то они там будут.
Список таблиц должен находиться в коллекции Tables.
myView - на выходе будет таблицей.

[- к содержанию -]

Ответ #2 @Алексей Немиро 09.07.2013 13:32
Да, совсем забыл. Для сложных SQL-запросов лучше создавать хранимые процедуры. Это удобней. И в редакторе SQL Server Management Studio с ними гораздо удобней работать.

И еще, после выполнения запроса, чтобы изменения отразились в списке таблиц/индексов (и т.п.), нужно всегда обновлять список.

[- к содержанию -]

Ответ #3 @capetownn 11.07.2013 17:29
Алексей,
БОЛЬШОЕ СПАСИБО за Ваши ответы,
благодаря которым всё работает!

[- к содержанию -]

Добавить свой ответ в эту тему
Среда Visual Basic STUDIO’2010 Professional
Тип базы данных - Microsoft SQL Server
Почему ранее созданное представления "myView" не заполняет DataGridView1?
. . . . . . . . . . . . . .
conn.Open()
' Create a data adapter
Dim da As New SqlDataAdapter("SELECT * FROM myView", conn) 
Dim ds As New DataSet
da.Fill(ds) 
DataGridView1.DataSource = ds.DefaultViewManager 
'++- DataGridView1.Update() ' не показывает содержимое DataGridView1
MsgBox("Доходит сюда")
PS: myView в среде Studio'2010 в окне Обозреватель серверов РАБОТАЕТ.

' второй вариант
 conn.Open()
 ' Create a data adapter
 Dim da2 As New SqlDataAdapter("myView", conn)
 ' Create DataSet, fill it and view in data grid
 Dim ds2 As New DataSet("myView")
 '+-1 da2.Fill(ds2, "myView") ' Выполнение запроса процедура "myView" окончилось 
 ' неудачно, так как "myView" является объектом представление.

 da2.Fill(ds2)
' Выполнение запроса процедура "myView" окончилось
' неудачно, так как "myView" является объектом представление.

СПАСИБО!

[- к содержанию -]

Ответ #1 @Алексей Немиро 09.07.2013 13:38
myView - это таблица. Нужно работать с ней, как с обычной таблицей.
DataGridView1.DataSource = ds
либо
DataGridView1.DataSource = ds.Tables(0)

DefaultViewManager к View никакого отношения не имеет. Это скорее некое подобие View, но на стороне Visual Basic .NET, они создаются из полученных данных и позволяют фильтровать данные, менять порядок сортировки и т.п. А все что отдает SQL Server - это обычные таблицы.

[- к содержанию -]

Ответ #2 @capetownn 11.07.2013 17:18
Алексей,
Большое Вам СПАСИБО!
ОК!

[- к содержанию -]

Добавить свой ответ в эту тему
Скажите пожалуйста как сделать в Word html-шаблоны

[- к содержанию -]

Ответ #2 @Алексей 10.07.2013 10:11
Скажите пожалуйста по этому исходному коду это можно сделать?
'получаем шаблон
Dim fileData As String = "D:\шаблон.html"
'меняем метку(и)
fileData = fileData.Replace("{метка}", "данные которые будут вставлены вместо метки")
'сохраняем результат
System.IO.File.WriteAllText("D:\результат.html", fileData)
'открываем файл в Word
Process.Start("D:\результат.html")

[- к содержанию -]

Ответ #3 @Алексей Немиро 10.07.2013 11:35
Скажите пожалуйста по этому исходному коду это можно сделать?
Конечно можно. Только это код обработки шаблона, а не создания. Создавать шаблон кодом конечно тоже можно, но это бессмысленно. Шаблон делается в Word руками, а код просто меняет указанные в шаблоне метки на что-то другое.
'получаем шаблон
Dim fileData As String = "D:\шаблон.html"
Это неправильный код. В переменную fileData будет передано имя файла, а не его содержимое.
Самый простой вариант чтения содержимого текстового файла
System.IO.File.ReadAllText("C:\путь к файлу")
т.е. будет:
'получаем шаблон
Dim fileData As String = System.IO.File.ReadAllText("D:\шаблон.html")
Но в идеале метод ReadAllText лучше не использовать, т.к. может случиться блокировка файлов. Лучше делать через Stream-ы. Кода будет на пять строк больше, или на десять, смотря как писать :)

В зависимости от меток, может потребоваться дополнительная коррекция файла шаблона. Для этого нужно открыть файл шаблона в блокноте и проверить, чтобы метки были правильными.

Например, в если в тексте документа есть метка: {фамилия}, то Word может добавить лишние тэги:

Лишние тэги нужно удалить (с соблюдением html-стандартов!), чтобы в html-тексте осталось просто {фамилия}:


В общем, весь смысл в том, чтобы в html-тексте метки были такими, чтобы их можно было найти программно.

Следует помнить, что изменение шаблона в Word и его последующее сохранение может повредить метки (могут быть добавлены лишние тэги) и нужно всегда, после этого, проверять правильность меток.

Word 2007 какой-то не такой, не записывает в html-файл выбранный вариант разметки страницы. Предыдущие версии записывали. Или может просто у меня версия Word 2007 косячная?
Если вдруг тоже будет подобная мелкая проблема, то это можно легко исправить, путем добавления в html-файл в тэг <w:WordDocument> следующих данных:
  <w:View>Print</w:View>
  <w:Zoom>90</w:Zoom>
Вот фрагмент html-файла, который создает Word, чтобы было понятно, куда вставлять эти строчки (выделено желтым):
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"
xmlns="http://www.w3.org/TR/REC-html40">

<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1251">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 12">
<meta name=Originator content="Microsoft Word 12">
<link rel=File-List href="template.files/filelist.xml">
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>Алексей Немиро</o:Author>
<o:LastAuthor>Алексей Немиро</o:LastAuthor>
<o:Revision>1</o:Revision>
<o:TotalTime>1</o:TotalTime>
<o:Created>2013-07-10T07:06:00Z</o:Created>
<o:LastSaved>2013-07-10T07:07:00Z</o:LastSaved>
<o:Pages>1</o:Pages>
<o:Words>12</o:Words>
<o:Characters>73</o:Characters>
<o:Lines>1</o:Lines>
<o:Paragraphs>1</o:Paragraphs>
<o:CharactersWithSpaces>84</o:CharactersWithSpaces>
<o:Version>12.00</o:Version>
</o:DocumentProperties>
</xml><![endif]-->
<link rel=themeData href="template.files/themedata.thmx">
<link rel=colorSchemeMapping href="template.files/colorschememapping.xml">
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Print</w:View>
<w:Zoom>90</w:Zoom>

<w:SpellingState>Clean</w:SpellingState>
<w:GrammarState>Clean</w:GrammarState>
<w:TrackMoves>false</w:TrackMoves>
<w:TrackFormatting/>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
...
</w:WordDocument>
</xml><![endif]--><!--[if gte mso 9]><xml>

Вот пример кода (консольное приложение):
Module Module1

  Sub Main()
    'получаем данные шаблона 
    Dim fileData As String = "" ' System.IO.File.ReadAllText("template.htm")' можно так, но лучше как показано ниже

    Using fs As New System.IO.FileStream("template.htm", IO.FileMode.Open, IO.FileAccess.Read, IO.FileShare.Read) 'файл будет искаться в одной папке с программой
      Using sr As New System.IO.StreamReader(fs, System.Text.Encoding.GetEncoding(1251)) 'важно: кодировка 1251
        fileData = sr.ReadToEnd()
      End Using
    End Using


    'меняем метки

    Console.WriteLine("Введите имя:")
    fileData = fileData.Replace("{имя}", Console.ReadLine()) 'меняем метку {имя} на то, что введет пользователь

    Console.WriteLine("Введите фамилию:")
    fileData = fileData.Replace("{фамилия}", Console.ReadLine()) 'меняем метку {фамилия} на то, что введет пользователь

    Console.WriteLine("Введите дата рождения:")
    fileData = fileData.Replace("{дата рождения}", Console.ReadLine()) 'меняем метку {дата рождения} на то, что введет пользователь

    'сохраняем результат
    'System.IO.File.WriteAllText("result.doc", fileData) 'файл будет сохранен в папку с программой

    '"result.doc" - файл будет сохранен в папку с программой
    'IO.FileMode.Create - если файл с таким именем существует, он будет перезаписан
    Using fs As New System.IO.FileStream("result.doc", IO.FileMode.Create, IO.FileAccess.Write, IO.FileShare.ReadWrite)
      Using sw As New System.IO.StreamWriter(fs, System.Text.Encoding.GetEncoding(1251)) 'важно: кодировка 1251
        sw.Write(fileData)
      End Using
    End Using


    'открываем файл в Word
    Process.Start("result.doc") 'файл будет открыт в программе, с которой ассоциировано расширение .doc
  End Sub

End Module

Аналогичный пример можно найти в прикрепленном ниже файле.

[- к содержанию -]

Ответ #4 @Алексей Немиро 10.07.2013 11:38
Что касается тэгов: <w:View> и <w:Zoom>, то первый - это режим разметки, а второй - масштаб. Второй, в принципе, можно не добавлять.

[- к содержанию -]

Ответ #5 @Алексей 11.07.2013 01:56
Большое спасибо!

[- к содержанию -]

Cookieee @i32 08.07.2013 15:47
День добрый .Подскажите как прописать на В.Б. правильно код..
 req.CookieContainer.Add(New Uri(" http://u"), _
 New Cookie("__PPU_SESSION_c-f", "Xf9d11,1373270253,1,1373270314X"))
Пишет что слишком большей для КОНТЕЙНЕРА..Прочитал про экранирование но теперь ошибку другую пишет..
 New Cookie("__PPU_SESSION_c-f", "" \ "Xf9d11,1373270253,1,1373270314X" \ ""))
Спасибо..

[- к содержанию -]

Ответ #1 @Алексей Немиро 09.07.2013 15:09
New Cookie("__PPU_SESSION_c-f", "" \ "Xf9d11,1373270253,1,1373270314X" \ ""))
Это неправильный синтаксис.
Строки в бэйсике должны быть в кавычках. Если в тексте нужна кавычка, то ставятся две кавычки.
Dim
s As String = "текст ""текст в кавычках"""

Что касается подмены куков, то лучше добавлять их через заголовки (коллекция Headers).

[- к содержанию -]

Ответ #2 @i32 10.07.2013 11:35
Про это разговора нет . Проблема с запетыми..А если куки добавлять через Хейдерс то как я писал .контейнер работать не будет..
Проблема - ругается на запетые в первом коде..Второй я уже пытался что то -как то...

[- к содержанию -]

Ответ #3 @Алексей Немиро 10.07.2013 11:46
По идее, куки в CookieContainer сами должны помещаться.

В первом запросе, на который сервер вернет куки, нужно создать пустой CookieContainer:
req.CookieContainer = new CookieContainer()

Куки будут в ответе: resp.Cookies

Если не сделать CookieContainer, то куков в resp может не быть (будут только в заголовках).

Чтобы передать куки в следующий запрос, достаточно передать их из ответа в запрос (масло масляное :) ):
req.CookieContainer = resp.Cookies

[- к содержанию -]

Ответ #4 @i32 10.07.2013 11:55
New Cookie("__PPU_SESSION_c-f", "Xf9d11,1373270253,1,1373270314X"))
тут первое -название кука "__PPU_SESSION_c-f" . второе валуе кука "Xf9d11,1373270253,1,1373270314X" . Вот мне надо прописать валуе..
Если вместо запетых поставить точки то все прокатывает..но мне нужны запетые..в ВАЛУЕ...Надо как то их экранировать или ..Вот вчем вопрос...

[- к содержанию -]

Ответ #5 @Алексей Немиро 10.07.2013 11:58
New Cookie("__PPU_SESSION_c-f", """Xf9d11,1373270253,1,1373270314X"""))

[- к содержанию -]

Добавить свой ответ в эту тему · В теме есть еще 13 ответов. Смотреть все ответы.

Все темы и обсуждения

Вакансии в IT

Программист 1С

Россия, Москва | Работа в офисе | 80 000,00 KBP

Программист C++

Россия, Москва | Работа в офисе | 70 000,00 KBP

Программист 1С

Россия, Москва | Работа в офисе | 65 000,00 KBP

Программист 1С

Россия, Москва | Работа в офисе

Программист Delphi / Oracle

Россия, Москва | Работа в офисе | 110 000,00 KBP

Ведущий разработчик мобильного приложения

Россия, Москва | Работа в офисе | 80 000,00 KBP

Программист

Россия, Москва | Работа в офисе | 20 000,00 KBP

Ведущий web-программист

Россия, Москва | Работа в офисе | 110 000,00 KBP

Web программист

Россия, Москва | Работа в офисе | 75 000,00 KBP

Разработчик Oracle PL/SQL

Россия, Москва | Работа в офисе | 90 000,00 KBP

Все вакансии в IT · Создать резюме

[- к содержанию -]

Новости мира IT

Mail.Ru запустила корпоративную почту с бесплатными доменами

Интернет-компания Mail.Ru запустила на своей платформе сервис корпоративной почты. Любой желающий сможет подключить свой домен к почте на Mail.Ru, либо бесплатно зарегистрировать новый домен, к которому и будет привязана почта. На каждом домене можно создать до пяти тысяч ящиков. Объем ящиков неограничен.

11.07.2013 10:15 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Американские пилоты поменяли бумажные карты на iPad

Летчики авиабазы ВВС США Скотт в Иллинойсе провели эксперимент, отказавшись от использования в полете бумажных карт и инструкций. Вместо них они взяли с собой планшеты iPad Mini, на которые предварительно была загружена вся необходимая информация. Эксперимент, признанный успешным, был проведен на борту самолета C-21A.

10.07.2013 10:47 · Категория: Железо · Источник: Lenta.ru

[- к содержанию -]

Умер создатель «Грамоты.ру» Алексей Кормилицын

9 июля после продолжительной болезни скончался 52-летний создатель проекта «Грамота.ру» Алексей Кормилицын. Он руководил созданием всех сервисов на сайте, а также участвовал в развитии порталов «Нет наркотикам», «Религия и СМИ» и других ресурсов. «Грамота.ру» была запущена в 2000 году.

10.07.2013 10:47 · Категория: Бизнес в IT · Источник: Lenta.ru

[- к содержанию -]

Все новости


Подпишитесь на тематические RSS-ленты Kbyte.Ru, чтобы быть в курсе последних новостей:

Основная лента · Форумы (темы и сообщения) · Visual Basic 5.0/6.0 · Visual Basic .NET · C# (Си шарп) · Delphi · JavaScript · ActionScript · ASP .NET · ASP .NET MVC

Ищите Kbyte.Ru в социальных сетях FaceBook, ВКонтакте, Twitter.

Если вы занимаетесь программированием, то наверняка вам пригодятся хитрые инструменты.


Международный портал для программистов и разработчиков Kbyte.Ru основан в 2006 году. Целью портала является объединение программистов и специалистов IT-бизнеса, студентов и преподавателей для обмена опытом и знаниями, оказания помощи во всех делах и начинаниях в области IT.
Kbyte.Ru является парнёром компаний Mail.Ru Group, WebMoney Transfer, Ozon.Ru и др.
Выпуск рассылки подготовлен автоматически. Все права на материалы выпуска принадлежат Kbyte.Ru если иное не указано отдельно.


В избранное