AXForum  
Вернуться   AXForum > Блоги > CRM, SharePoint и Черная Магия
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

Добро пожаловать в мой блог! Изначально он не задумывался как блог CRM разработчика, но жизнь сама внесла нужные коррективы. Тут я публикою все свои наблюдения относительно обозначенных в заголовке систем. Если Вы найдете в нем что-то интересное для Вас, как для заказчика, то буду рад сотрудничать с Вами! В моей компетенции 100% задач по MS CRM 3.0/4.0/2011:
  • Консалтинг
  • Проектирование
  • Разработка
  • Обучение


MVP 2010, 2011
Оценить эту запись

Мигрень интегратора: миграция со старых форматов Office

Запись от Артем Enot Грунин размещена 19.04.2010 в 14:06

Итак, в преддверии выхода MS Office 2010 агонизирующим старым форматам Word/Excel/* 97 приходит их заслуженный покой на свалке истории. Впрочем, если вами были разработаны многочисленные шаблоны слияния, форм, и пр. пр. в старых форматах, то лично вам покой будет только снится. В прошлую пятницу я был тем самым счастливчиком, которому торжественно поручили преобразовать огромную прорву наших старых шаблонов для SharePoint. К счастью память подсказала мне один сайт: http://www.script-coding.info/index.html. Представляю вашему вниманию JS скрипт который можно натравить на библиотеку ваших старых шаблонов, чтобы он сохранил в нее же файлы в новом формате. Ничего волшебного скрипт не делает. В действительности он лишь открывает Word в фоновом режиме, загружает в него файлы в старых форматах, после чего сохраняет их в новых.
Код:
// Format Codes
var wdFormatDocument = 0; // Microsoft Office Word format. 
var wdFormatDOSText = 4; // Microsoft DOS text format. 
var wdFormatDOSTextLineBreaks = 5; // Microsoft DOS text with line breaks preserved. 
var wdFormatEncodedText = 7; // Encoded text format. 
var wdFormatFilteredHTML = 10; // Filtered HTML format. 
var wdFormatHTML = 8; // Standard HTML format. 
var wdFormatRTF = 6; // Rich text format (RTF). 
var wdFormatTemplate = 1; // Word template format. 
var wdFormatText = 2; // Microsoft Windows text format. 
var wdFormatTextLineBreaks = 3; // Windows text format with line breaks preserved. 
var wdFormatUnicodeText = 7; // Unicode text format. 
var wdFormatWebArchive = 9; // Web archive format. 
var wdFormatXML = 11; // Extensible Markup Language (XML) format. 
var wdFormatDocument97 = 0; // Microsoft Word 97 document format. 
var wdFormatDocumentDefault = 16; // Word default document file format. For Microsoft Office Word 2007, this is the DOCX format. 
var wdFormatPDF = 17; // PDF format. 
var wdFormatTemplate97 = 1; // Word 97 template format. 
var wdFormatXMLDocument = 12; // XML document format. 
var wdFormatXMLDocumentMacroEnabled = 13; // XML document format with macros enabled. 
var wdFormatXMLTemplate = 14; // XML template format. 
var wdFormatXMLTemplateMacroEnabled = 15; // XML template format with macros enabled. 
var wdFormatXPS = 18; // XPS format. 

// Save Options
var wdDoNotSaveChanges = 0; // Do not save pending changes. 
var wdPromptToSaveChanges = -2; // Prompt the user to save pending changes. 
var wdSaveChanges = -1; // Save pending changes automatically without prompting the user. 

// Format Extentions
var FileExtentions = [];
FileExtentions[wdFormatDocument97] = ".doc";
FileExtentions[wdFormatDOSText] = ".txt";
FileExtentions[wdFormatDOSTextLineBreaks] = ".txt";
FileExtentions[wdFormatEncodedText] = ".txt";
FileExtentions[wdFormatFilteredHTML] = ".html";
FileExtentions[wdFormatHTML] = ".html";
FileExtentions[wdFormatRTF] = ".rtf";
FileExtentions[wdFormatTemplate97] = ".dot";
FileExtentions[wdFormatText] = ".txt";
FileExtentions[wdFormatTextLineBreaks] = ".txt";
FileExtentions[wdFormatUnicodeText] = ".txt";
FileExtentions[wdFormatWebArchive] = ".mht";
FileExtentions[wdFormatXML] = ".xml";
FileExtentions[wdFormatPDF] = ".pdf";
FileExtentions[wdFormatXMLDocument] = ".docx";
FileExtentions[wdFormatXMLDocumentMacroEnabled] = ".docm";
FileExtentions[wdFormatXMLTemplate] = ".dotx";
FileExtentions[wdFormatXMLTemplateMacroEnabled] = ".dotm";
FileExtentions[wdFormatXPS] = ".xps";

// Преобразовать все файлы указанного типа в указанный тип

Convert(wdFormatTemplate97, wdFormatXMLTemplateMacroEnabled);


function Convert(oFromFormat, oToFormat)
{
    try
    {
        var oWord = new ActiveXObject("Word.Application");
    
        var fso = new ActiveXObject("Scripting.FileSystemObject");
        var oFolder = fso.GetFolder(".");
        var oFiles = oFolder.files;

        var enumerator = new Enumerator(oFiles);
        var count = 0;
        
        var formatRegex = new RegExp(FileExtentions[oFromFormat] + "$", "gi");
        for (; ! enumerator.atEnd(); enumerator.moveNext())
        {
            var file = enumerator.item();
            if (file.Name.search(formatRegex) != -1)
            {
                ConvertAndSave(oWord, file, oFromFormat, oToFormat, oConverted);
                count++;
            }
        }
        WScript.Echo("Произведено " + count + " преобразований");
    }
    catch(err)
    {
        WScript.Echo(err.description);
    }
    finally
    {
        if (oWord) oWord.Quit();
    }
}

function ConvertAndSave(oWord, oFile, oFromFormat, oToFormat)
{
    var docName = oFile.Name;
    var formatRegex = new RegExp(FileExtentions[oFromFormat] + "$", "gi");
    var docNewName = docName.replace(formatRegex, FileExtentions[oToFormat]);

    var oDoc = oWord.Documents.Open(oFile.Path);
    oDoc.SaveAs(oFile.ParentFolder + "\\" + docNewName, oToFormat);
    oDoc.Close(wdSaveChanges);    
}
Сохраните приведенный выше код в текстовый файл с расширением .js. Поместите файл в каталог с шаблонами и запустите.

p.s. Зря я связался с JS: в данном случае выгоднее использовать "родной" для офиса VBScript
p.p.s. Зря я вообще связался с этой задачей - быстрее было бы сделать руками, но вам, я думаю, код сэкономит кучу времени.
p.p.p.s. Для Excel и прочего подход тоже работает, но с меня уже хватит!
Размещено в SharePoint
Просмотров 47686 Комментарии 0
Всего комментариев 0

Комментарии

 


Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 13:08.