Skip to content

Instantly share code, notes, and snippets.

@rkttu
Last active April 14, 2025 04:55
Show Gist options
  • Select an option

  • Save rkttu/30c6d94ee09d912896462985c04a8daa to your computer and use it in GitHub Desktop.

Select an option

Save rkttu/30c6d94ee09d912896462985c04a8daa to your computer and use it in GitHub Desktop.
Run Office 2019 in Windows Full Container (19H1)
@echo off
pushd "%~dp0"
docker build -t o365full:latest .
:exit
popd
@echo on
<Configuration>
<Add OfficeClientEdition="32" Channel="PerpetualVL2019">
<Product ID="ProPlus2019Volume">
<Language ID="ko-kr" />
</Product>
</Add>
<Display Level="None" AcceptEULA="TRUE" />
<Property Name="AUTOACTIVATE" Value="1"/>
</Configuration>
FROM mcr.microsoft.com/windows:1903 AS build
WORKDIR C:\\odtsetup
ADD https://download.microsoft.com/download/2/7/A/27AF1BE6-DD20-4CB4-B154-EBAB8A7D4A7E/officedeploymenttool_11617-33601.exe odtsetup.exe
RUN odtsetup.exe /quiet /norestart /extract:C:\\odtsetup
FROM mcr.microsoft.com/windows:1903 AS download
WORKDIR C:\\odtsetup
COPY --from=build C:\\odtsetup\\setup.exe .
ADD config.xml .
RUN setup.exe /download C:\\odtsetup\\config.xml
FROM mcr.microsoft.com/windows:1903
MAINTAINER rkttu
WORKDIR C:\\odtsetup
COPY --from=build C:\\odtsetup\\setup.exe .
COPY --from=download C:\\odtsetup\\Office .
ADD config.xml .
RUN setup.exe /configure C:\\odtsetup\\config.xml
WORKDIR /
RUN rmdir /s /q C:\\odtsetup
# https://stackoverflow.com/questions/10837437/interop-word-documents-open-is-null
RUN powershell -Command new-object -comobject word.application
RUN mkdir C:\\Windows\\SysWOW64\\config\\systemprofile\\Desktop
VOLUME C:\\data
ADD sample .
// Requires office.dll and word interop pia.dll from GAC
using Microsoft.Office.Interop.Word;
using System;
using System.IO;
using System.Linq;
namespace OfficePIATest
{
internal static class Program
{
[STAThread]
public static void Main(string[] args)
{
var input = args.ElementAtOrDefault(0) ?? string.Empty;
var output = args.ElementAtOrDefault(1) ?? string.Empty;
if (!File.Exists(input))
{
Console.Error.WriteLine("Cannot open the file `{0}`.", input);
Environment.Exit(1);
return;
}
if (string.IsNullOrWhiteSpace(output))
{
Console.Error.WriteLine("Invalid output path.");
Environment.Exit(2);
return;
}
var outputDir = Path.GetDirectoryName(output);
if (!Directory.Exists(outputDir))
Directory.CreateDirectory(outputDir);
var wordApp = new Application();
Console.Out.WriteLine("word app initialized.");
Document wordDocument = null;
var t = new System.Threading.Tasks.Task(() => wordDocument = wordApp.Documents.Open(input));
t.Start();
t.Wait();
if (wordDocument == null)
{
Console.Error.WriteLine("Word document is null reference.");
Environment.Exit(3);
return;
}
else
Console.Out.WriteLine("Word document opened.");
wordDocument.ExportAsFixedFormat(output, WdExportFormat.wdExportFormatPDF);
Console.Out.WriteLine("Export performed.");
wordDocument.Close(WdSaveOptions.wdDoNotSaveChanges,
WdOriginalFormat.wdOriginalDocumentFormat,
false); //Close document
Console.Write("Closing document");
wordApp.Quit(); //Important: When you forget this Word keeps running in the background
Console.Out.WriteLine("Quitting word app.");
}
}
}
@echo off
pushd "%~dp0"
docker run -v %cd%\data:c:\data --rm -it --name=o365fulltest o365full:latest cmd
:exit
popd
@echo on
@abbasmashaddy72
Copy link
Copy Markdown

How to use it.

@hamza-uptodata
Copy link
Copy Markdown

How does it work, can you please guide me??

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment