Страница 1 из 1
Поля в SLK
Добавлено: 06 сен 2011, 10:40
maikl
Выводим отчет в SLK, из линк-формы. Хотим ужать форму за счет полей, не получается. В офисе 2003 почему то установленные поля из линк-формы не переносятся в выходную форму.
Уже замучились.
В 2007 этой проблемы нет.
Может кто знает как решить ее в 2003 офисом?
Re: Поля в SLK
Добавлено: 06 сен 2011, 13:56
Semi-bit
Если вы хотите "ужать" высоту строк, должен вас огорчить - FCOM игнорирует информацию о ней. В выходном файле, если высота строк была задана специально, эти строки "сползут", поскольку из отчёта выкусывается программная часть, а эти строки никак не обрабатываются. Выход - удалить все записи вида F;M из исходника. Эксель автоматически установит нужную высоту.
Если же надо "ужать" столбцы, поэкспериментируйте с секцией F;W. В каждой из таких строк первое число указывает начальный столбец, второе - конечный, а 3-е - ширину столбца в точках.
Re: Поля в SLK
Добавлено: 06 сен 2011, 14:21
edward_K
в общеми лучше сразу в Excel чем мучится
. Из текстовой формы это сделать достаточно легко.
Re: Поля в SLK
Добавлено: 06 сен 2011, 15:17
maikl
Нет, мы хотим уменьшить поля листа (отступы справа и слева) т.е аналогично параметрам страниц.
Не ячеек, а листа.
Re: Поля в SLK
Добавлено: 06 сен 2011, 20:17
edward_K
slk это не тот формат который позволяет это делать. Более того и макрос тяжко запустить. Хотя я когда-то ложил шаблон в автозагрузку, который при старте Excel смотрел какая книга открылась и если встретил нужную производил над ней манипуляции - но в Excel нормальный проще
Re: Поля в SLK
Добавлено: 07 сен 2011, 09:29
Semi-bit
Ну, SLK позволяет изменить параметр названия генератора этого самого слк, отсюда можно плясать...
Например,
ID;PWXL;N;E
можно заменить на
ID;PSLKMEGATOOL;N;E
а шаблон или надстройка будет сначала читать поступившие slk в сыром режиме, и в зависимости от наличия метки делать свою "грязную" работу
C RTF ещё проще такое сделать, благо он поддерживает переменные Ворда.
Re: Поля в SLK
Добавлено: 07 сен 2011, 12:51
spark
Semi-bit писал(а):Ну, SLK позволяет изменить параметр названия генератора этого самого слк, отсюда можно плясать...
Например,
ID;PWXL;N;E
можно заменить на
ID;PSLKMEGATOOL;N;E
а шаблон или надстройка будет сначала читать поступившие slk в сыром режиме, и в зависимости от наличия метки делать свою "грязную" работу
C RTF ещё проще такое сделать, благо он поддерживает переменные Ворда.
А можно поподробней? Ничего не понял, но чувствую что очень нужная мне весчЪ! =)
Re: Поля в SLK
Добавлено: 07 сен 2011, 13:04
RAJAH
spark писал(а):Ничего не понял, но чувствую что очень нужная мне весчЪ! =)
http://www.youtube.com/watch?v=lavMXK7AuXA
Re: Поля в SLK
Добавлено: 07 сен 2011, 13:11
spark
Да, Да!! Мне пожалуйста обе буквы!
Re: Поля в SLK
Добавлено: 07 сен 2011, 15:09
Semi-bit
Хм, не знаю, каким боком сюда затесался Семён Фарада, дома ссылку посмотрю (на работе нормального инета нету, а тот что есть, тает с неимоверной скоростью)...
spark, надо ваш документик открыть, и заменить в нём самую первую строку вышеописанным способом. Потом можно этот файл скомпилировать випом. Затем сделайте шаблон xlt (или xltm, если у вас Excel 2007) . В шаблоне сделайте макрос и настройте его так, чтобы он запускался
при открытии рабочей книги. В макросе уже можно сделать проверку на наличие вашей пометки.
Я вместо шаблонов предпочитаю делать общие надстройки Office средствами VSTO, потому что её достаточно просто установить на произвольный компьютер, и не надо заморачиваться со способом отлова события открытия документа.
Re: Поля в SLK
Добавлено: 07 сен 2011, 15:27
spark
Semi-bit писал(а):Хм, не знаю, каким боком сюда затесался Семён Фарада, дома ссылку посмотрю (на работе нормального инета нету, а тот что есть, тает с неимоверной скоростью)...
spark, надо ваш документик открыть, и заменить в нём самую первую строку вышеописанным способом. Потом можно этот файл скомпилировать випом. Затем сделайте шаблон xlt (или xltm, если у вас Excel 2007) . В шаблоне сделайте макрос и настройте его так, чтобы он запускался
при открытии рабочей книги. В макросе уже можно сделать проверку на наличие вашей пометки.
Я вместо шаблонов предпочитаю делать общие надстройки Office средствами VSTO, потому что её достаточно просто установить на произвольный компьютер, и не надо заморачиваться со способом отлова события открытия документа.
Что только люди не придумают. Как это все приходит вам в головы?? =))
А можно пример макроса, который определяет нужный slk?
Re: Поля в SLK
Добавлено: 08 сен 2011, 13:14
Semi-bit
spark, конечно, можно! На VBA затрудняюсь привести код, там событие открытия документа приложением сложно отловить, поэтому решение будет на C#. Если Visual Studio у вас нет, могу прислать исходники полностью, а здесь покажу саму суть.
Подготовка:
- Создать общую надстройку;
- Выбрать Excel на вкладке "Приложения" мастера создания надстройки;
- Добавить ссылки на сборки Microsoft.Office.Interop.Excel, System.Windows.Forms;
- Поместить такой код в обработчик Connect:
Код: Выделить всё
using XL = Microsoft.Office.Interop.Excel;
using System.Windows.Forms;
using System.IO;
public Connect()
{
XL.Application app = new XL.Application();
app.WorkbookOpen += new XL.AppEvents_WorkbookOpenEventHandler(app_WorkbookOpen);
}
После подготовки в функции
app_WorkbookOpen пишете такой код:
Код: Выделить всё
void app_WorkbookOpen(XL.Workbook Wb)
{
if (Wb.FileFormat == XL.XlFileFormat.xlSYLK)
{
StreamReader sr = new StreamReader(Wb.FullName);
string header = sr.ReadLine();
sr.Close();
if (header.Contains("SLKMEGATOOL"))
{
MessageBox.Show("Открыта нужная книга!");
XL.Worksheet activeSheet = Wb.ActiveSheet;
activeSheet.PageSetup.LeftMargin = Wb.Application.InchesToPoints(0.25);
activeSheet.PageSetup.RightMargin = Wb.Application.InchesToPoints(0.25);
activeSheet.PageSetup.TopMargin = Wb.Application.InchesToPoints(0.75);
activeSheet.PageSetup.BottomMargin = Wb.Application.InchesToPoints(0.75);
activeSheet.PageSetup.HeaderMargin = Wb.Application.InchesToPoints(0.3);
activeSheet.PageSetup.FooterMargin = Wb.Application.InchesToPoints(0.3);
}
}
}
Теперь, подключив эту надстройку к Экселю (для этого автоматически создаётся установщик), мы сможем проверять, какая книга поступила на открытие. Небольшой минус - необходимо установить её на каждый компьютер. Впрочем, если у вас правильно настроен домен, проблем возникнуть не должно.