Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
43da06fbdf | ||
|
|
4061d94bcd | ||
|
|
07b74ab9be | ||
|
|
05a55da8e3 | ||
|
|
8f6433f16a | ||
|
|
b71af71035 | ||
|
|
d66c521db0 | ||
|
|
55e1b7a73d | ||
|
|
64f033be20 | ||
|
|
fbbe981392 | ||
|
|
d27239c61b | ||
|
|
fe1777ed1e | ||
|
|
9ffbe6dc7d | ||
|
|
8ba225a5bb | ||
|
|
aea2e325f6 | ||
|
|
0a896bc43f | ||
|
|
46384c8469 | ||
|
|
e786cf4867 | ||
|
|
5998eae01a | ||
|
|
362ee135a1 | ||
|
|
7e2410e948 |
115
.github/workflows/dotnet-desktop.yml
vendored
Normal file
115
.github/workflows/dotnet-desktop.yml
vendored
Normal file
|
|
@ -0,0 +1,115 @@
|
|||
# This workflow uses actions that are not certified by GitHub.
|
||||
# They are provided by a third-party and are governed by
|
||||
# separate terms of service, privacy policy, and support
|
||||
# documentation.
|
||||
|
||||
# This workflow will build, test, sign and package a WPF or Windows Forms desktop application
|
||||
# built on .NET Core.
|
||||
# To learn how to migrate your existing application to .NET Core,
|
||||
# refer to https://docs.microsoft.com/en-us/dotnet/desktop-wpf/migration/convert-project-from-net-framework
|
||||
#
|
||||
# To configure this workflow:
|
||||
#
|
||||
# 1. Configure environment variables
|
||||
# GitHub sets default environment variables for every workflow run.
|
||||
# Replace the variables relative to your project in the "env" section below.
|
||||
#
|
||||
# 2. Signing
|
||||
# Generate a signing certificate in the Windows Application
|
||||
# Packaging Project or add an existing signing certificate to the project.
|
||||
# Next, use PowerShell to encode the .pfx file using Base64 encoding
|
||||
# by running the following Powershell script to generate the output string:
|
||||
#
|
||||
# $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte
|
||||
# [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt'
|
||||
#
|
||||
# Open the output file, SigningCertificate_Encoded.txt, and copy the
|
||||
# string inside. Then, add the string to the repo as a GitHub secret
|
||||
# and name it "Base64_Encoded_Pfx."
|
||||
# For more information on how to configure your signing certificate for
|
||||
# this workflow, refer to https://github.com/microsoft/github-actions-for-desktop-apps#signing
|
||||
#
|
||||
# Finally, add the signing certificate password to the repo as a secret and name it "Pfx_Key".
|
||||
# See "Build the Windows Application Packaging project" below to see how the secret is used.
|
||||
#
|
||||
# For more information on GitHub Actions, refer to https://github.com/features/actions
|
||||
# For a complete CI/CD sample to get started with GitHub Action workflows for Desktop Applications,
|
||||
# refer to https://github.com/microsoft/github-actions-for-desktop-apps
|
||||
|
||||
name: .NET Core Desktop
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [ "master" ]
|
||||
pull_request:
|
||||
branches: [ "master" ]
|
||||
|
||||
jobs:
|
||||
|
||||
build:
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
configuration: [Debug, Release]
|
||||
|
||||
runs-on: windows-latest # For a list of available runner types, refer to
|
||||
# https://help.github.com/en/actions/reference/workflow-syntax-for-github-actions#jobsjob_idruns-on
|
||||
|
||||
env:
|
||||
Solution_Name: OfficeConverter.sln # Replace with your solution name, i.e. MyWpfApp.sln.
|
||||
Test_Project_Path: OfficeConverter\OfficeConverter.csproj # Replace with the path to your test project, i.e. MyWpfApp.Tests\MyWpfApp.Tests.csproj.
|
||||
Wap_Project_Directory: your-wap-project-directory-name # Replace with the Wap project directory relative to the solution, i.e. MyWpfApp.Package.
|
||||
Wap_Project_Path: your-wap-project-path # Replace with the path to your Wap project, i.e. MyWpf.App.Package\MyWpfApp.Package.wapproj.
|
||||
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v3
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
# Install the .NET Core workload
|
||||
- name: Install .NET Core
|
||||
uses: actions/setup-dotnet@v3
|
||||
with:
|
||||
dotnet-version: 6.0.x
|
||||
|
||||
# Add MSBuild to the PATH: https://github.com/microsoft/setup-msbuild
|
||||
- name: Setup MSBuild.exe
|
||||
uses: microsoft/setup-msbuild@v1.0.2
|
||||
|
||||
# Execute all unit tests in the solution
|
||||
- name: Execute unit tests
|
||||
run: dotnet test
|
||||
|
||||
# Restore the application to populate the obj folder with RuntimeIdentifiers
|
||||
- name: Restore the application
|
||||
run: msbuild $env:Solution_Name /t:Restore /p:Configuration=$env:Configuration
|
||||
env:
|
||||
Configuration: ${{ matrix.configuration }}
|
||||
|
||||
# Decode the base 64 encoded pfx and save the Signing_Certificate
|
||||
- name: Decode the pfx
|
||||
run: |
|
||||
$pfx_cert_byte = [System.Convert]::FromBase64String("${{ secrets.Base64_Encoded_Pfx }}")
|
||||
$certificatePath = Join-Path -Path $env:Wap_Project_Directory -ChildPath GitHubActionsWorkflow.pfx
|
||||
[IO.File]::WriteAllBytes("$certificatePath", $pfx_cert_byte)
|
||||
|
||||
# Create the app package by building and packaging the Windows Application Packaging project
|
||||
- name: Create the app package
|
||||
run: msbuild $env:Wap_Project_Path /p:Configuration=$env:Configuration /p:UapAppxPackageBuildMode=$env:Appx_Package_Build_Mode /p:AppxBundle=$env:Appx_Bundle /p:PackageCertificateKeyFile=GitHubActionsWorkflow.pfx /p:PackageCertificatePassword=${{ secrets.Pfx_Key }}
|
||||
env:
|
||||
Appx_Bundle: Always
|
||||
Appx_Bundle_Platforms: x86|x64
|
||||
Appx_Package_Build_Mode: StoreUpload
|
||||
Configuration: ${{ matrix.configuration }}
|
||||
|
||||
# Remove the pfx
|
||||
- name: Remove the pfx
|
||||
run: Remove-Item -path $env:Wap_Project_Directory\GitHubActionsWorkflow.pfx
|
||||
|
||||
# Upload the MSIX package: https://github.com/marketplace/actions/upload-a-build-artifact
|
||||
- name: Upload build artifacts
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: MSIX Package
|
||||
path: ${{ env.Wap_Project_Directory }}\AppPackages
|
||||
|
|
@ -3,12 +3,9 @@ Microsoft Visual Studio Solution File, Format Version 12.00
|
|||
# Visual Studio Version 17
|
||||
VisualStudioVersion = 17.7.34031.279
|
||||
MinimumVisualStudioVersion = 10.0.40219.1
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OfficeConverter", "OfficeConverter\OfficeConverter.csproj", "{6E77662E-82C3-4913-8964-5A452B229F78}"
|
||||
EndProject
|
||||
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Projektmappenelemente", "Projektmappenelemente", "{D66D2D0C-17EE-4008-BB58-DDD6EB016AAB}"
|
||||
ProjectSection(SolutionItems) = preProject
|
||||
OfficeConverter\OfficeConverter.exe = OfficeConverter\OfficeConverter.exe
|
||||
EndProjectSection
|
||||
EndProject
|
||||
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OfficeConverterCore", "OfficeConverterCore\OfficeConverterCore.csproj", "{B996BAD7-81B4-47F1-84E9-73ABE48859AC}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
|
|
@ -16,16 +13,22 @@ Global
|
|||
Debug|x64 = Debug|x64
|
||||
Release|Any CPU = Release|Any CPU
|
||||
Release|x64 = Release|x64
|
||||
Test|Any CPU = Test|Any CPU
|
||||
Test|x64 = Test|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Debug|x64.Build.0 = Debug|x64
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Release|x64.ActiveCfg = Release|x64
|
||||
{6E77662E-82C3-4913-8964-5A452B229F78}.Release|x64.Build.0 = Release|x64
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Debug|x64.ActiveCfg = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Debug|x64.Build.0 = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Release|x64.ActiveCfg = Release|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Release|x64.Build.0 = Release|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Test|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Test|Any CPU.Build.0 = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Test|x64.ActiveCfg = Debug|Any CPU
|
||||
{B996BAD7-81B4-47F1-84E9-73ABE48859AC}.Test|x64.Build.0 = Debug|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
HideSolutionNode = FALSE
|
||||
|
|
|
|||
|
|
@ -1,6 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8.1"/>
|
||||
</startup>
|
||||
</configuration>
|
||||
|
|
@ -1,3 +0,0 @@
|
|||
<Weavers xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="FodyWeavers.xsd">
|
||||
<Costura />
|
||||
</Weavers>
|
||||
|
|
@ -1,428 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" />
|
||||
<Import Project="..\packages\ILMerge.3.0.41\build\ILMerge.props" Condition="Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" />
|
||||
<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
|
||||
<PropertyGroup>
|
||||
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
|
||||
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
|
||||
<ProjectGuid>{6E77662E-82C3-4913-8964-5A452B229F78}</ProjectGuid>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<RootNamespace>OfficeConverter</RootNamespace>
|
||||
<AssemblyName>OfficeConverter</AssemblyName>
|
||||
<TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
|
||||
<FileAlignment>512</FileAlignment>
|
||||
<ProjectTypeGuids>{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
|
||||
<Deterministic>true</Deterministic>
|
||||
<TargetFrameworkProfile />
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<NuGetPackageImportStamp>
|
||||
</NuGetPackageImportStamp>
|
||||
<PublishUrl>D:\OneDrive - wyniger\Design & Development\Code\Publish\DocConvert\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>5</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
|
||||
<PlatformTarget>AnyCPU</PlatformTarget>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<Optimize>true</Optimize>
|
||||
<OutputPath>bin\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestCertificateThumbprint>43955F90264C43EAA4330714374C483BFDF3B6C5</ManifestCertificateThumbprint>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestKeyFile>OfficeConverter_TemporaryKey.pfx</ManifestKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<GenerateManifests>true</GenerateManifests>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<SignManifests>true</SignManifests>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<DebugSymbols>true</DebugSymbols>
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DebugType>full</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
<DefineConstants>TRACE</DefineConstants>
|
||||
<Optimize>true</Optimize>
|
||||
<DebugType>pdbonly</DebugType>
|
||||
<PlatformTarget>x64</PlatformTarget>
|
||||
<LangVersion>7.3</LangVersion>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<Prefer32Bit>true</Prefer32Bit>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>icons8-microsoft-office-480.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Costura, Version=5.7.0.0, Culture=neutral, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Costura.Fody.5.7.0\lib\netstandard1.0\Costura.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.Win32.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Microsoft.Win32.Primitives.4.3.0\lib\net46\Microsoft.Win32.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.AppContext, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.AppContext.4.3.0\lib\net463\System.AppContext.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.ComponentModel.Composition">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Console, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Console.4.3.0\lib\net46\System.Console.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Data">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Diagnostics.DiagnosticSource, Version=4.0.1.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.DiagnosticSource.4.3.0\lib\net46\System.Diagnostics.DiagnosticSource.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Diagnostics.Tracing, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Diagnostics.Tracing.4.3.0\lib\net462\System.Diagnostics.Tracing.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Globalization.Calendars, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Globalization.Calendars.4.3.0\lib\net46\System.Globalization.Calendars.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.4.3.0\lib\net462\System.IO.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.4.3.0\lib\net46\System.IO.Compression.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.FileSystem">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.Compression.ZipFile, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.Compression.ZipFile.4.3.0\lib\net46\System.IO.Compression.ZipFile.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.4.3.0\lib\net46\System.IO.FileSystem.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.IO.FileSystem.Primitives, Version=4.0.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.IO.FileSystem.Primitives.4.3.0\lib\net46\System.IO.FileSystem.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.4.3.0\lib\net463\System.Linq.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Linq.Expressions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Linq.Expressions.4.3.0\lib\net463\System.Linq.Expressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Http, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Http.4.3.0\lib\net46\System.Net.Http.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Net.Sockets, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Net.Sockets.4.3.0\lib\net46\System.Net.Sockets.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Numerics">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Reflection, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Reflection.4.3.0\lib\net462\System.Reflection.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.4.3.0\lib\net462\System.Runtime.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.Extensions, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.Extensions.4.3.0\lib\net462\System.Runtime.Extensions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.4.3.0\lib\net463\System.Runtime.InteropServices.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Runtime.InteropServices.RuntimeInformation, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Runtime.InteropServices.RuntimeInformation.4.3.0\lib\net45\System.Runtime.InteropServices.RuntimeInformation.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Algorithms, Version=4.2.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Algorithms.4.3.0\lib\net463\System.Security.Cryptography.Algorithms.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Encoding, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Encoding.4.3.0\lib\net46\System.Security.Cryptography.Encoding.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.Primitives, Version=4.0.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.Primitives.4.3.0\lib\net46\System.Security.Cryptography.Primitives.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Security.Cryptography.X509Certificates, Version=4.1.1.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Security.Cryptography.X509Certificates.4.3.0\lib\net461\System.Security.Cryptography.X509Certificates.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Text.RegularExpressions, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Text.RegularExpressions.4.3.0\lib\net463\System.Text.RegularExpressions.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Controls.Input.Toolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Infragistics.Themes.MetroDark.Wpf.1.0.0\lib\net40\System.Windows.Controls.Input.Toolkit.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Controls.Layout.Toolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Infragistics.Themes.MetroDark.Wpf.1.0.0\lib\net40\System.Windows.Controls.Layout.Toolkit.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System.Windows.Forms">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Core">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.Linq">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Data.DataSetExtensions">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xaml">
|
||||
<RequiredTargetFramework>4.0</RequiredTargetFramework>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="System.Xml.ReaderWriter, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\System.Xml.ReaderWriter.4.3.0\lib\net46\System.Xml.ReaderWriter.dll</HintPath>
|
||||
<Private>True</Private>
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="WindowsBase">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="PresentationCore">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="PresentationFramework">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Include="WPFToolkit, Version=3.5.40128.1, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL">
|
||||
<HintPath>..\packages\Infragistics.Themes.MetroDark.Wpf.1.0.0\lib\net40\WPFToolkit.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ApplicationDefinition Include="App.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</ApplicationDefinition>
|
||||
<Page Include="MainWindow.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Compile Include="App.xaml.cs">
|
||||
<DependentUpon>App.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="MainWindow.xaml.cs">
|
||||
<DependentUpon>MainWindow.xaml</DependentUpon>
|
||||
<SubType>Code</SubType>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Compile>
|
||||
<Page Include="Themes\MetroDark\MetroDark.MSControls.Core.Implicit.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Themes\MetroDark\MetroDark.MSControls.Toolkit.Implicit.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Themes\MetroDark\Styles.Shared.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Themes\MetroDark\Styles.WPF.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
<Page Include="Themes\MetroDark\Theme.Colors.xaml">
|
||||
<Generator>MSBuild:Compile</Generator>
|
||||
<SubType>Designer</SubType>
|
||||
</Page>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="Properties\AssemblyInfo.cs">
|
||||
<SubType>Code</SubType>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Resources.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DesignTime>True</DesignTime>
|
||||
<DependentUpon>Resources.resx</DependentUpon>
|
||||
</Compile>
|
||||
<Compile Include="Properties\Settings.Designer.cs">
|
||||
<AutoGen>True</AutoGen>
|
||||
<DependentUpon>Settings.settings</DependentUpon>
|
||||
<DesignTimeSharedInput>True</DesignTimeSharedInput>
|
||||
</Compile>
|
||||
<EmbeddedResource Include="Properties\Resources.resx">
|
||||
<Generator>ResXFileCodeGenerator</Generator>
|
||||
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
|
||||
</EmbeddedResource>
|
||||
<None Include="OfficeConverter_TemporaryKey.pfx" />
|
||||
<None Include="packages.config" />
|
||||
<None Include="Properties\Settings.settings">
|
||||
<Generator>SettingsSingleFileGenerator</Generator>
|
||||
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
|
||||
</None>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="App.config" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Themes\MetroDark\HowToApplyTheme.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<COMReference Include="Microsoft.Office.Core">
|
||||
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
|
||||
<VersionMajor>2</VersionMajor>
|
||||
<VersionMinor>8</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.Excel">
|
||||
<Guid>{00020813-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>1</VersionMajor>
|
||||
<VersionMinor>9</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.PowerPoint">
|
||||
<Guid>{91493440-5A91-11CF-8700-00AA0060263B}</Guid>
|
||||
<VersionMajor>2</VersionMajor>
|
||||
<VersionMinor>12</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.Word">
|
||||
<Guid>{00020905-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>8</VersionMajor>
|
||||
<VersionMinor>7</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="VBIDE">
|
||||
<Guid>{0002E157-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>5</VersionMajor>
|
||||
<VersionMinor>3</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WCFMetadata Include="Connected Services\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.8.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.8.1 %28x86 und x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="icons8-microsoft-office-480.ico" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
|
||||
<PropertyGroup>
|
||||
<ErrorText>Dieses Projekt verweist auf mindestens ein NuGet-Paket, das auf diesem Computer fehlt. Verwenden Sie die Wiederherstellung von NuGet-Paketen, um die fehlenden Dateien herunterzuladen. Weitere Informationen finden Sie unter "http://go.microsoft.com/fwlink/?LinkID=322105". Die fehlende Datei ist "{0}".</ErrorText>
|
||||
</PropertyGroup>
|
||||
<Error Condition="!Exists('..\packages\ILMerge.3.0.41\build\ILMerge.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\ILMerge.3.0.41\build\ILMerge.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Fody.6.5.5\build\Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Fody.6.5.5\build\Fody.targets'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.props'))" />
|
||||
<Error Condition="!Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets'))" />
|
||||
</Target>
|
||||
<Import Project="..\packages\Fody.6.5.5\build\Fody.targets" Condition="Exists('..\packages\Fody.6.5.5\build\Fody.targets')" />
|
||||
<Import Project="..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets" Condition="Exists('..\packages\Costura.Fody.5.7.0\build\Costura.Fody.targets')" />
|
||||
</Project>
|
||||
Binary file not shown.
|
|
@ -1,55 +0,0 @@
|
|||
using System.Reflection;
|
||||
using System.Resources;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Windows;
|
||||
|
||||
// Allgemeine Informationen über eine Assembly werden über die folgenden
|
||||
// Attribute gesteuert. Ändern Sie diese Attributwerte, um die Informationen zu ändern,
|
||||
// die einer Assembly zugeordnet sind.
|
||||
[assembly: AssemblyTitle("OfficeConverter")]
|
||||
[assembly: AssemblyDescription("")]
|
||||
[assembly: AssemblyConfiguration("")]
|
||||
[assembly: AssemblyCompany("")]
|
||||
[assembly: AssemblyProduct("OfficeConverter")]
|
||||
[assembly: AssemblyCopyright("Copyright © 2024")]
|
||||
[assembly: AssemblyTrademark("")]
|
||||
[assembly: AssemblyCulture("")]
|
||||
|
||||
// Durch Festlegen von ComVisible auf FALSE werden die Typen in dieser Assembly
|
||||
// für COM-Komponenten unsichtbar. Wenn Sie auf einen Typ in dieser Assembly von
|
||||
// COM aus zugreifen müssen, sollten Sie das ComVisible-Attribut für diesen Typ auf "True" festlegen.
|
||||
[assembly: ComVisible(false)]
|
||||
|
||||
//Um mit dem Erstellen lokalisierbarer Anwendungen zu beginnen, legen Sie
|
||||
//<UICulture>ImCodeVerwendeteKultur</UICulture> in der .csproj-Datei
|
||||
//in einer <PropertyGroup> fest. Wenn Sie in den Quelldateien beispielsweise Deutsch
|
||||
//(Deutschland) verwenden, legen Sie <UICulture> auf \"de-DE\" fest. Heben Sie dann die Auskommentierung
|
||||
//des nachstehenden NeutralResourceLanguage-Attributs auf. Aktualisieren Sie "en-US" in der nachstehenden Zeile,
|
||||
//sodass es mit der UICulture-Einstellung in der Projektdatei übereinstimmt.
|
||||
|
||||
//[assembly: NeutralResourcesLanguage("en-US", UltimateResourceFallbackLocation.Satellite)]
|
||||
|
||||
|
||||
[assembly: ThemeInfo(
|
||||
ResourceDictionaryLocation.None, //Speicherort der designspezifischen Ressourcenwörterbücher
|
||||
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
|
||||
// oder in den Anwendungsressourcen-Wörterbüchern nicht gefunden werden kann.)
|
||||
ResourceDictionaryLocation.SourceAssembly //Speicherort des generischen Ressourcenwörterbuchs
|
||||
//(wird verwendet, wenn eine Ressource auf der Seite nicht gefunden wird,
|
||||
// designspezifischen Ressourcenwörterbuch nicht gefunden werden kann.)
|
||||
)]
|
||||
|
||||
|
||||
// Versionsinformationen für eine Assembly bestehen aus den folgenden vier Werten:
|
||||
//
|
||||
// Hauptversion
|
||||
// Nebenversion
|
||||
// Buildnummer
|
||||
// Revision
|
||||
//
|
||||
// Sie können alle Werte angeben oder Standardwerte für die Build- und Revisionsnummern verwenden,
|
||||
// indem Sie "*" wie unten gezeigt eingeben:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("1.0.0.0")]
|
||||
[assembly: AssemblyFileVersion("1.0.0.0")]
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Costura.Fody" version="5.7.0" targetFramework="net481" developmentDependency="true" />
|
||||
<package id="Fody" version="6.5.5" targetFramework="net481" developmentDependency="true" />
|
||||
<package id="ILMerge" version="3.0.41" targetFramework="net481" />
|
||||
<package id="Infragistics.Themes.MetroDark.Wpf" version="1.0.0" targetFramework="net451" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="net481" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="net481" />
|
||||
<package id="NETStandard.Library" version="1.6.1" targetFramework="net481" />
|
||||
<package id="System.AppContext" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Collections" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Collections.Concurrent" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Console" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Diagnostics.Debug" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Diagnostics.DiagnosticSource" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Diagnostics.Tools" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Diagnostics.Tracing" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Globalization" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Globalization.Calendars" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.IO" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.IO.Compression" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.IO.Compression.ZipFile" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.IO.FileSystem" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.IO.FileSystem.Primitives" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Linq" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Linq.Expressions" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Net.Http" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Net.Primitives" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Net.Sockets" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.ObjectModel" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Reflection" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Reflection.Extensions" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Reflection.Primitives" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Resources.ResourceManager" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.Extensions" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.Handles" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.InteropServices" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.InteropServices.RuntimeInformation" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Runtime.Numerics" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Security.Cryptography.Algorithms" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Security.Cryptography.Encoding" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Security.Cryptography.Primitives" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Security.Cryptography.X509Certificates" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Text.Encoding" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Text.Encoding.Extensions" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Text.RegularExpressions" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Threading" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Threading.Tasks" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Threading.Timer" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="net481" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="net481" />
|
||||
</packages>
|
||||
14
OfficeConverterCore/App.config
Normal file
14
OfficeConverterCore/App.config
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<configuration>
|
||||
<startup>
|
||||
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8.1" />
|
||||
</startup>
|
||||
<runtime>
|
||||
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
|
||||
<dependentAssembly>
|
||||
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
|
||||
<bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
|
||||
</dependentAssembly>
|
||||
</assemblyBinding>
|
||||
</runtime>
|
||||
</configuration>
|
||||
|
|
@ -5,14 +5,9 @@
|
|||
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
|
||||
xmlns:local="clr-namespace:OfficeConverter"
|
||||
mc:Ignorable="d"
|
||||
Title="OfficeConverter 1.0" Height="715" Width="1045" Background="#FF1A1A1A">
|
||||
Title="OfficeConverter 1.0" Height="715" Width="1460" Background="#FF1A1A1A">
|
||||
<Grid Background="#FF424242">
|
||||
<Grid.ColumnDefinitions>
|
||||
|
||||
<ColumnDefinition Width="356*"/>
|
||||
<ColumnDefinition Width="689*"/>
|
||||
|
||||
</Grid.ColumnDefinitions>
|
||||
<Grid Margin="0,70,0,0" Background="#FF1A1A1A" Grid.ColumnSpan="2">
|
||||
<GroupBox x:Name="grpFolders" Header="grpFolders" Margin="10,10,0,0" RenderTransformOrigin="0.5,0.5" Height="276" VerticalAlignment="Top" HorizontalAlignment="Left" Width="694">
|
||||
<GroupBox.RenderTransform>
|
||||
|
|
@ -34,11 +29,13 @@
|
|||
<Button x:Name="btnDestFolder" Content="btnDest" Margin="545,171,0,0" VerticalAlignment="Top" Click="btnDestFolder_Click"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<GroupBox x:Name="grpFiles" Header="grpFiles" Margin="709,10,0,0" Height="147" VerticalAlignment="Top" HorizontalAlignment="Left" Width="300">
|
||||
<GroupBox x:Name="grpFiles" Header="grpFiles" Margin="709,10,0,0" Height="276" VerticalAlignment="Top" HorizontalAlignment="Left" Width="300">
|
||||
<Grid>
|
||||
<CheckBox x:Name="chkWord" Content="Word .doc" HorizontalAlignment="Left" Margin="0,10,0,0" VerticalAlignment="Top"/>
|
||||
<CheckBox x:Name="chkExcel" Content="Excel .xls" HorizontalAlignment="Left" Margin="0,45,0,0" VerticalAlignment="Top"/>
|
||||
<CheckBox x:Name="chkPowerpoint" Content="PowerPoint .ppt" HorizontalAlignment="Left" Margin="0,80,0,0" VerticalAlignment="Top"/>
|
||||
<CheckBox x:Name="chkWordTmpl" Content="Wordtemplates .dot" HorizontalAlignment="Left" Margin="0,115,0,0" VerticalAlignment="Top"/>
|
||||
<CheckBox x:Name="chkExcelTmpl" Content="Exceltemplates .xlt" HorizontalAlignment="Left" Margin="0,150,0,0" VerticalAlignment="Top"/>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<GroupBox x:Name="grpSourceFiles" Header="grpSourceFiles" Margin="10,291,0,0" Height="259" VerticalAlignment="Top" HorizontalAlignment="Left" Width="497">
|
||||
|
|
@ -51,13 +48,25 @@
|
|||
<ListBox x:Name="lstDestFiles" ItemsSource="{Binding convertedFiles}" />
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<Button x:Name="btnConvert" Content="Button" HorizontalAlignment="Left" Margin="835,162,0,0" VerticalAlignment="Top" Width="174" Height="66" Click="btnConvert_Click"/>
|
||||
<Label x:Name="lblState" Content="lblState" HorizontalAlignment="Left" Margin="709,258,0,0" VerticalAlignment="Top" Width="300" Height="28"/>
|
||||
<Button x:Name="btnConvert" Content="Button" HorizontalAlignment="Left" Margin="10,555,0,0" VerticalAlignment="Top" Width="174" Height="42" Click="btnConvert_Click"/>
|
||||
<Button x:Name="btnExport" Content="btnExport" HorizontalAlignment="Left" Height="33" Margin="915,555,0,0" VerticalAlignment="Top" Width="94" Click="btnExport_Click"/>
|
||||
<Button x:Name="btnDelete" Content="btnDelete" HorizontalAlignment="Left" Margin="793,555,0,0" VerticalAlignment="Top" Width="117" Height="33" Click="btnDelete_Click"/>
|
||||
<GroupBox HorizontalAlignment="Left" Height="540" Header="Log" Margin="1028,10,0,0" VerticalAlignment="Top" Width="360">
|
||||
<Grid>
|
||||
<ListBox x:Name="lstLog" Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" ScrollViewer.HorizontalScrollBarVisibility="Auto">
|
||||
<ListBox.ItemTemplate>
|
||||
<DataTemplate>
|
||||
<TextBlock Text="{Binding}" TextAlignment="Left"/>
|
||||
</DataTemplate>
|
||||
</ListBox.ItemTemplate>
|
||||
</ListBox>
|
||||
</Grid>
|
||||
</GroupBox>
|
||||
<Button x:Name="btnExportLog" Content="btnExportLog" HorizontalAlignment="Left" Height="33" Margin="1294,555,0,0" VerticalAlignment="Top" Width="94" Click="btnExport_Click"/>
|
||||
<Label x:Name="lblState" Content="Label" HorizontalAlignment="Left" Margin="189,569,0,0" VerticalAlignment="Top" Width="519"/>
|
||||
|
||||
</Grid>
|
||||
<Label Content="Office Document Converter" HorizontalAlignment="Left" Margin="10,16,0,0" VerticalAlignment="Top" Width="277" FontSize="20"/>
|
||||
<ComboBox x:Name="cmbLang" HorizontalAlignment="Left" Margin="470,33,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="cmbLang_SelectionChanged" Grid.Column="1"/>
|
||||
<ComboBox x:Name="cmbLang" HorizontalAlignment="Left" Margin="1267,33,0,0" VerticalAlignment="Top" Width="120" SelectionChanged="cmbLang_SelectionChanged"/>
|
||||
</Grid>
|
||||
</Window>
|
||||
|
|
@ -1,8 +1,10 @@
|
|||
using System;
|
||||
using Microsoft.VisualBasic;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.ComponentModel;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
|
|
@ -27,24 +29,36 @@ namespace OfficeConverter
|
|||
//Definiter listen für die Anzeige im GUI
|
||||
List<string> combinedFiles = new List<string>();
|
||||
List<string> convertedFiles = new List<string>();
|
||||
|
||||
|
||||
private List<string> logEntries = new List<string>();
|
||||
string msgConversionInProgress = "Conversion in progress";
|
||||
string msgConversionComplete = "Conversion complete";
|
||||
|
||||
//Globalvariables
|
||||
bool doSubfolders = false;
|
||||
bool doReplace = false;
|
||||
bool doWord = false;
|
||||
bool doExcel = false;
|
||||
bool doPPoint = false;
|
||||
bool doWordTmpl = false;
|
||||
bool doExcelTmpl = false;
|
||||
string errorFolderEmpty = "";
|
||||
|
||||
public MainWindow()
|
||||
{
|
||||
|
||||
InitializeComponent();
|
||||
System.Diagnostics.PresentationTraceSources.SetTraceLevel(lstSourceFiles.ItemContainerGenerator, System.Diagnostics.PresentationTraceLevel.High);
|
||||
|
||||
setLangEN();
|
||||
chkWord.IsChecked = true;
|
||||
chkExcel.IsChecked = true;
|
||||
chkPowerpoint.IsChecked = true;
|
||||
cmbLang.Items.Add("EN");
|
||||
cmbLang.Items.Add("DE");
|
||||
cmbLang.Items.Add("FR");
|
||||
cmbLang.Items.Add("IT");
|
||||
cmbLang.Items.Add("BN");
|
||||
cmbLang.SelectedIndex = 0;
|
||||
lstDestFiles.ItemsSource = convertedFiles;
|
||||
|
||||
|
|
@ -56,6 +70,22 @@ namespace OfficeConverter
|
|||
lblState.Content = "Ready";
|
||||
cancellationTokenSource = new CancellationTokenSource();
|
||||
}
|
||||
private void UpdateLog(string logEntry)
|
||||
{
|
||||
// Use Dispatcher.Invoke to update UI elements from the UI thread
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
lstLog.HorizontalContentAlignment = HorizontalAlignment.Right;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
//Konvertier-Button
|
||||
|
|
@ -70,13 +100,17 @@ namespace OfficeConverter
|
|||
{
|
||||
lblState.Content = "Konvertierung läuft";
|
||||
}
|
||||
|
||||
|
||||
doSubfolders = (bool)chkSubfolders.IsChecked;
|
||||
doReplace = (bool)chkReplace.IsChecked;
|
||||
doWord = (bool)chkWord.IsChecked;
|
||||
doExcel = (bool)chkExcel.IsChecked;
|
||||
doPPoint = (bool)chkPowerpoint.IsChecked;
|
||||
|
||||
doWordTmpl = (bool)chkWordTmpl.IsChecked;
|
||||
doExcelTmpl = (bool)chkExcelTmpl.IsChecked;
|
||||
logEntries.Clear();
|
||||
lstLog.Items.Refresh();
|
||||
|
||||
// Check if the background worker is not already running
|
||||
if (!backgroundWorker.IsBusy)
|
||||
{
|
||||
|
|
@ -140,6 +174,8 @@ namespace OfficeConverter
|
|||
combinedFiles.ForEach(file => lstSourceFiles.Items.Add(file));
|
||||
// Enable buttons after conversion completion
|
||||
UpdateButtonStates(true);
|
||||
grpSourceFiles.Header = "Queue";
|
||||
lblState.Content = msgConversionComplete;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
@ -155,29 +191,58 @@ namespace OfficeConverter
|
|||
|
||||
}
|
||||
|
||||
|
||||
// Iterate over currentFolderFiles and start the conversion asynchronously
|
||||
private async Task SearchAndConvertDocs(string folderPath, CancellationToken cancellationToken)
|
||||
{
|
||||
string[] docFiles = null;
|
||||
string[] xlsFiles = null;
|
||||
string[] pptFiles = null;
|
||||
string[] dotFiles = null;
|
||||
string[] xltFiles = null;
|
||||
|
||||
int wordFilesCount = 0;
|
||||
int excelFilesCount = 0;
|
||||
int powerpointFilesCount = 0;
|
||||
int wordTemplateFilesCount = 0;
|
||||
int excelTemplateFilesCount = 0;
|
||||
|
||||
if (doWord)
|
||||
{
|
||||
docFiles = Directory.GetFiles(folderPath, "*.doc");
|
||||
wordFilesCount = docFiles.Length;
|
||||
UpdateLog($"Found {wordFilesCount} Word files (*.doc) in folder {folderPath}");
|
||||
}
|
||||
if (doExcel)
|
||||
{
|
||||
xlsFiles = Directory.GetFiles(folderPath, "*.xls");
|
||||
excelFilesCount = xlsFiles.Length;
|
||||
UpdateLog($"Found {excelFilesCount} Excel files (*.xls) in folder {folderPath}");
|
||||
}
|
||||
if (doPPoint)
|
||||
{
|
||||
pptFiles = Directory.GetFiles(folderPath, "*.ppt");
|
||||
powerpointFilesCount = pptFiles.Length;
|
||||
UpdateLog($"Found {powerpointFilesCount} PowerPoint files (*.ppt) in folder {folderPath}");
|
||||
}
|
||||
if (doWordTmpl)
|
||||
{
|
||||
dotFiles = Directory.GetFiles(folderPath, "*.dot");
|
||||
wordTemplateFilesCount = dotFiles.Length;
|
||||
UpdateLog($"Found {wordTemplateFilesCount} Word template files (*.dot) in folder {folderPath}");
|
||||
}
|
||||
if (doExcelTmpl)
|
||||
{
|
||||
xltFiles = Directory.GetFiles(folderPath, "*.xlt");
|
||||
excelTemplateFilesCount = xltFiles.Length;
|
||||
UpdateLog($"Found {excelTemplateFilesCount} Excel template files (*.xlt) in folder {folderPath}");
|
||||
}
|
||||
|
||||
// Check for null before adding to combinedFiles
|
||||
if (docFiles != null)
|
||||
{
|
||||
combinedFiles.AddRange(docFiles);
|
||||
|
||||
}
|
||||
if (xlsFiles != null)
|
||||
{
|
||||
|
|
@ -187,8 +252,17 @@ namespace OfficeConverter
|
|||
{
|
||||
combinedFiles.AddRange(pptFiles);
|
||||
}
|
||||
if (dotFiles != null)
|
||||
{
|
||||
combinedFiles.AddRange(dotFiles);
|
||||
}
|
||||
if (xltFiles != null)
|
||||
{
|
||||
combinedFiles.AddRange(xltFiles);
|
||||
}
|
||||
|
||||
Console.WriteLine($"Processing files in folder: {folderPath}");
|
||||
UpdateLog($"Processing files in folder: {folderPath}");
|
||||
|
||||
/// Create a copy of the collection to avoid modification during iteration
|
||||
List<string> snapshot = new List<string>(combinedFiles);
|
||||
|
|
@ -231,6 +305,7 @@ namespace OfficeConverter
|
|||
{
|
||||
combinedFiles.Clear();
|
||||
}
|
||||
|
||||
}
|
||||
catch (OperationCanceledException)
|
||||
{
|
||||
|
|
@ -244,6 +319,12 @@ namespace OfficeConverter
|
|||
foreach (var subfolder in subfolders)
|
||||
{
|
||||
// Pass the cancellation token to the recursive call
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
string headerName = Path.GetFileName(subfolder);
|
||||
grpSourceFiles.Header = headerName;
|
||||
|
||||
});
|
||||
await SearchAndConvertDocs(subfolder, cancellationToken);
|
||||
|
||||
// Check for cancellation after processing each subfolder
|
||||
|
|
@ -254,14 +335,16 @@ namespace OfficeConverter
|
|||
}
|
||||
}
|
||||
}
|
||||
// Use Dispatcher.Invoke to update UI elements from the UI thread
|
||||
//System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
//{
|
||||
// lblState.Content = "Background work completed!";
|
||||
//});
|
||||
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
lblState.Content = "Background work completed!";
|
||||
});
|
||||
|
||||
DisplayCombinedFiles();
|
||||
}
|
||||
|
||||
private async Task ConvertFileToNewFormatAsync(string filePath)
|
||||
{
|
||||
await Task.Run(() =>
|
||||
|
|
@ -284,28 +367,48 @@ namespace OfficeConverter
|
|||
case ".ppt":
|
||||
ConvertPptToPptx(filePath, doSubfolders, doReplace);
|
||||
break;
|
||||
case ".dot":
|
||||
ConvertDocToDotx(filePath, doSubfolders, doReplace);
|
||||
break;
|
||||
case ".xlt":
|
||||
ConvertXltToXltx(filePath, doSubfolders, doReplace);
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
// Handle other file types or show an error message
|
||||
Console.WriteLine($"Unsupported file type: {filePath}");
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
string logEntry = $"Converted file: {filePath}";
|
||||
Console.WriteLine(logEntry);
|
||||
UpdateLog(logEntry);
|
||||
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
combinedFiles.Remove(filePath);
|
||||
if (!convertedFiles.Contains(filePath))
|
||||
{
|
||||
convertedFiles.Add(filePath);
|
||||
DisplayCombinedFiles();
|
||||
}
|
||||
DisplayCombinedFiles();
|
||||
});
|
||||
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle exceptions during conversion
|
||||
Console.WriteLine($"Error converting {filePath}: {ex.Message}");
|
||||
string logEntry = $"Error converting {filePath}: {ex.Message}";
|
||||
Console.WriteLine(logEntry);
|
||||
UpdateLog(logEntry);
|
||||
}
|
||||
});
|
||||
|
||||
// Update UI on the main thread
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
combinedFiles.Remove(filePath);
|
||||
convertedFiles.Add(filePath);
|
||||
|
||||
DisplayCombinedFiles();
|
||||
});
|
||||
|
||||
}
|
||||
private void ConvertXlsToXlsx(string xlsFile, bool doSubfolders, bool doReplace)
|
||||
{
|
||||
|
|
@ -335,6 +438,20 @@ namespace OfficeConverter
|
|||
workbook.SaveAs(newXlsxPath, Excel.XlFileFormat.xlOpenXMLWorkbook);
|
||||
workbook.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception
|
||||
Console.WriteLine($"Error converting {xlsFile} to .dotx: {ex.Message}");
|
||||
string logEntry = $"Error converting {xlsFile} to .dotx: {ex.Message}";
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Quit Excel and release resources
|
||||
|
|
@ -345,6 +462,77 @@ namespace OfficeConverter
|
|||
KillProcess("EXCEL");
|
||||
}
|
||||
}
|
||||
private void ConvertXltToXltx(string xltFile, bool doSubfolders, bool doReplace)
|
||||
{
|
||||
try
|
||||
{
|
||||
Excel.Application excelApp = new Excel.Application();
|
||||
excelApp.DisplayAlerts = false;
|
||||
|
||||
try
|
||||
{
|
||||
Excel.Workbook workbook = excelApp.Workbooks.Open(xltFile);
|
||||
|
||||
string targetFolderPath = "";
|
||||
|
||||
// Use Dispatcher.Invoke to execute code on the UI thread
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
targetFolderPath = GetTargetFolderPath(doReplace, doSubfolders, xltFile);
|
||||
});
|
||||
|
||||
// Ensure the target folder exists
|
||||
if (!Directory.Exists(targetFolderPath))
|
||||
{
|
||||
Directory.CreateDirectory(targetFolderPath);
|
||||
}
|
||||
|
||||
// Construct the new path for the .xltx file
|
||||
string newXltxPath = Path.Combine(targetFolderPath, Path.ChangeExtension(Path.GetFileName(xltFile), ".xltx"));
|
||||
workbook.SaveAs(newXltxPath, Excel.XlFileFormat.xlOpenXMLTemplate);
|
||||
workbook.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception
|
||||
Console.WriteLine($"Error converting {xltFile} to .dotx: {ex.Message}");
|
||||
string logEntry = $"Error converting {xltFile} to .dotx: {ex.Message}";
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Quit Excel and release resources
|
||||
excelApp.Quit();
|
||||
Marshal.ReleaseComObject(excelApp);
|
||||
|
||||
// Ensure Excel processes are terminated
|
||||
KillProcess("EXCEL");
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle exceptions during conversion
|
||||
Console.WriteLine($"Error converting {xltFile}: {ex.Message}");
|
||||
}
|
||||
|
||||
// Update UI on the main thread
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
combinedFiles.Remove(xltFile);
|
||||
convertedFiles.Add(xltFile);
|
||||
|
||||
DisplayCombinedFiles();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
private void ConvertPptToPptx(string pptFile, bool doSubfolders, bool doReplace)
|
||||
{
|
||||
PowerPoint.Application pptApp = new PowerPoint.Application();
|
||||
|
|
@ -376,6 +564,20 @@ namespace OfficeConverter
|
|||
presentation.SaveAs(newPptxPath, PowerPoint.PpSaveAsFileType.ppSaveAsOpenXMLPresentation);
|
||||
presentation.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception
|
||||
Console.WriteLine($"Error converting {pptFile} to .dotx: {ex.Message}");
|
||||
string logEntry = $"Error converting {pptFile} to .dotx: {ex.Message}";
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Set PowerPoint application visibility back to true before quitting
|
||||
|
|
@ -413,6 +615,20 @@ namespace OfficeConverter
|
|||
doc.SaveAs2(newDocxPath, Word.WdSaveFormat.wdFormatXMLDocument);
|
||||
doc.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception
|
||||
Console.WriteLine($"Error converting {docFile} to .dotx: {ex.Message}");
|
||||
string logEntry = $"Error converting {docFile} to .dotx: {ex.Message}";
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Quit Word and release resources
|
||||
|
|
@ -423,6 +639,59 @@ namespace OfficeConverter
|
|||
KillProcess("WINWORD");
|
||||
}
|
||||
}
|
||||
private void ConvertDocToDotx(string dotFile, bool doSubfolders, bool doReplace)
|
||||
{
|
||||
Word.Application wordApp = new Word.Application();
|
||||
wordApp.DisplayAlerts = Word.WdAlertLevel.wdAlertsNone;
|
||||
|
||||
try
|
||||
{
|
||||
Word.Document doc = wordApp.Documents.Open(dotFile);
|
||||
|
||||
string targetFolderPath = "";
|
||||
|
||||
// Use Dispatcher.Invoke to execute code on the UI thread
|
||||
Dispatcher.Invoke(() =>
|
||||
{
|
||||
targetFolderPath = GetTargetFolderPath(doReplace, doSubfolders, dotFile);
|
||||
});
|
||||
|
||||
// Ensure the target folder exists
|
||||
if (!Directory.Exists(targetFolderPath))
|
||||
{
|
||||
Directory.CreateDirectory(targetFolderPath);
|
||||
}
|
||||
|
||||
// Construct the new path for the .dotx file
|
||||
string newDotxPath = Path.Combine(targetFolderPath, Path.ChangeExtension(Path.GetFileName(dotFile), ".dotx"));
|
||||
doc.SaveAs2(newDotxPath, Word.WdSaveFormat.wdFormatXMLTemplate);
|
||||
doc.Close();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
// Handle or log the exception
|
||||
Console.WriteLine($"Error converting {dotFile} to .dotx: {ex.Message}");
|
||||
string logEntry = $"Error converting {dotFile} to .dotx: {ex.Message}";
|
||||
System.Windows.Application.Current.Dispatcher.Invoke(() =>
|
||||
{
|
||||
logEntries.Add(logEntry);
|
||||
// Update the ListBox with log entries
|
||||
lstLog.ItemsSource = logEntries;
|
||||
lstLog.Items.Refresh();
|
||||
lstLog.ScrollIntoView(logEntry);
|
||||
});
|
||||
}
|
||||
finally
|
||||
{
|
||||
// Quit Word and release resources
|
||||
wordApp.Quit();
|
||||
Marshal.ReleaseComObject(wordApp);
|
||||
|
||||
// Ensure Word processes are terminated
|
||||
KillProcess("WINWORD");
|
||||
}
|
||||
}
|
||||
|
||||
private void KillProcess(string processName)
|
||||
{
|
||||
try
|
||||
|
|
@ -466,10 +735,10 @@ namespace OfficeConverter
|
|||
string sourceFolderName = Path.GetFileName(originalFolderPath);
|
||||
|
||||
// Remove the source folder name from the target path
|
||||
targetFolder = targetFolder.Replace(sourceFolderName, "").TrimEnd('\\');
|
||||
targetFolder = targetFolder.TrimEnd('\\');
|
||||
|
||||
// Replace the original folder path with the destination folder path
|
||||
targetFolder = targetFolder.Replace(originalFolderPath, txtDestFolder.Text.TrimEnd('\\'));
|
||||
//targetFolder = targetFolder.Replace(originalFolderPath, txtDestFolder.Text.TrimEnd('\\'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -508,7 +777,10 @@ namespace OfficeConverter
|
|||
btnConvert.Content = "Convert";
|
||||
btnDelete.Content = "Delete Files";
|
||||
btnExport.Content = "Export list";
|
||||
errorFolderEmpty = "Destination folder is required when 'Replace files' is not selected.";
|
||||
errorFolderEmpty = "Destination folder is required when 'Replace files' is not selected.";
|
||||
btnExportLog.Content = "Save Log";
|
||||
msgConversionInProgress = "Conversion in progress";
|
||||
msgConversionComplete = "Conversion complete";
|
||||
}
|
||||
private void setLangDE()
|
||||
{
|
||||
|
|
@ -526,7 +798,99 @@ namespace OfficeConverter
|
|||
btnDelete.Content = "Dateien löschen";
|
||||
btnExport.Content = "Liste exportieren";
|
||||
errorFolderEmpty = "Zielordner darf nicht leer sein, wenn 'Ersetze Dateien' nicht gewählt wurde.";
|
||||
btnExportLog.Content = "Log sichern";
|
||||
msgConversionInProgress = "Konvertierung läuft";
|
||||
msgConversionComplete = "Konvertierung abgeschlossen";
|
||||
}
|
||||
private void setLangFR()
|
||||
{
|
||||
// Update labels, buttons, and headers in the "Folders" section
|
||||
grpFolders.Header = "Dossiers";
|
||||
lblSouceFolder.Content = "Dossier source";
|
||||
lblDestFolder.Content = "Dossier de destination";
|
||||
btnDestFolder.Content = "Parcourir";
|
||||
btnSourceFolder.Content = "Parcourir";
|
||||
chkReplace.Content = "Remplacer les fichiers (Préserver la structure des sous-dossiers)";
|
||||
chkSubfolders.Content = "Inclure les sous-dossiers";
|
||||
|
||||
// Update labels and headers in the "Files" section
|
||||
grpFiles.Header = "Fichiers";
|
||||
grpSourceFiles.Header = "File d'attente";
|
||||
grpDestFiles.Header = "Terminé";
|
||||
|
||||
// Update button labels in various sections
|
||||
btnConvert.Content = "Convertir";
|
||||
btnDelete.Content = "Supprimer les fichiers";
|
||||
btnExport.Content = "Exporter la liste";
|
||||
btnExportLog.Content = "Enregistrer le journal";
|
||||
|
||||
// Set error message for an empty destination folder
|
||||
errorFolderEmpty = "Le dossier de destination est requis lorsque 'Remplacer les fichiers' n'est pas sélectionné.";
|
||||
|
||||
// Set messages for conversion progress and completion
|
||||
msgConversionInProgress = "Conversion en cours";
|
||||
msgConversionComplete = "Conversion terminée";
|
||||
}
|
||||
private void setLangIT()
|
||||
{
|
||||
// Update labels, buttons, and headers in the "Folders" section
|
||||
grpFolders.Header = "Cartelle";
|
||||
lblSouceFolder.Content = "Cartella di origine";
|
||||
lblDestFolder.Content = "Cartella di destinazione";
|
||||
btnDestFolder.Content = "Sfoglia";
|
||||
btnSourceFolder.Content = "Sfoglia";
|
||||
chkReplace.Content = "Sostituisci i file (Preserva la struttura delle sottocartelle)";
|
||||
chkSubfolders.Content = "Includi sottocartelle";
|
||||
|
||||
// Update labels and headers in the "Files" section
|
||||
grpFiles.Header = "File";
|
||||
grpSourceFiles.Header = "Coda";
|
||||
grpDestFiles.Header = "Completato";
|
||||
|
||||
// Update button labels in various sections
|
||||
btnConvert.Content = "Converti";
|
||||
btnDelete.Content = "Elimina i file";
|
||||
btnExport.Content = "Esporta lista";
|
||||
btnExportLog.Content = "Salva il registro";
|
||||
|
||||
// Set error message for an empty destination folder
|
||||
errorFolderEmpty = "La cartella di destinazione è richiesta quando 'Sostituisci i file' non è selezionato.";
|
||||
|
||||
// Set messages for conversion progress and completion
|
||||
msgConversionInProgress = "Conversione in corso";
|
||||
msgConversionComplete = "Conversione completata";
|
||||
}
|
||||
|
||||
private void setLangBN()
|
||||
{
|
||||
// Update labels, buttons, and headers in the "Folders" section
|
||||
grpFolders.Header = "ফোল্ডার";
|
||||
lblSouceFolder.Content = "উৎস ফোল্ডার";
|
||||
lblDestFolder.Content = "গন্তব্য ফোল্ডার";
|
||||
btnDestFolder.Content = "ব্রাউজ";
|
||||
btnSourceFolder.Content = "ব্রাউজ";
|
||||
chkReplace.Content = "ফাইল প্রতিস্থাপন (সাবফোল্ডারে ফোল্ডার কাঠামো সংরক্ষণ করুন)";
|
||||
chkSubfolders.Content = "সাবফোল্ডারগুলি অন্তর্ভুক্ত করুন";
|
||||
|
||||
// Update labels and headers in the "Files" section
|
||||
grpFiles.Header = "ফাইলগুলি";
|
||||
grpSourceFiles.Header = "কিউ";
|
||||
grpDestFiles.Header = "সম্পূর্ণ";
|
||||
|
||||
// Update button labels in various sections
|
||||
btnConvert.Content = "কনভার্ট";
|
||||
btnDelete.Content = "ফাইলগুলি মুছুন";
|
||||
btnExport.Content = "তালিকা রপ্তানি করুন";
|
||||
btnExportLog.Content = "লগ সংরক্ষণ করুন";
|
||||
|
||||
// Set error message for an empty destination folder
|
||||
errorFolderEmpty = "ফাইলগুলি নির্বাচন করার সময় গন্তব্য ফোল্ডার প্রয়োজন।";
|
||||
|
||||
// Set messages for conversion progress and completion
|
||||
msgConversionInProgress = "কনভার্ট চলছে";
|
||||
msgConversionComplete = "কনভার্ট সম্পূর্ণ";
|
||||
}
|
||||
|
||||
private void btnDestFolder_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
using (var folderBrowserDialog = new Forms.FolderBrowserDialog())
|
||||
|
|
@ -580,6 +944,17 @@ namespace OfficeConverter
|
|||
case 1:
|
||||
setLangDE();
|
||||
break;
|
||||
case 2:
|
||||
setLangFR();
|
||||
break;
|
||||
|
||||
case 3:
|
||||
setLangIT();
|
||||
break;
|
||||
case 4:
|
||||
setLangBN();
|
||||
break;
|
||||
|
||||
}
|
||||
}
|
||||
private void chkReplace_Clicked(object sender, RoutedEventArgs e)
|
||||
|
|
@ -623,6 +998,20 @@ namespace OfficeConverter
|
|||
System.Windows.MessageBox.Show($"Error exporting converted files: {ex.Message}");
|
||||
}
|
||||
}
|
||||
private void ExportConvertedLogFilesToFile(string filePath)
|
||||
{
|
||||
try
|
||||
{
|
||||
// Write the contents of the convertedFiles list to a text file
|
||||
File.WriteAllLines(filePath, logEntries);
|
||||
|
||||
System.Windows.MessageBox.Show($"Export successful. File saved at: {filePath}");
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
System.Windows.MessageBox.Show($"Error exporting converted files: {ex.Message}");
|
||||
}
|
||||
}
|
||||
|
||||
private void btnExport_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
|
|
@ -639,7 +1028,21 @@ namespace OfficeConverter
|
|||
ExportConvertedFilesToFile(saveFileDialog.FileName);
|
||||
}
|
||||
}
|
||||
private void btnExportLog_Click(object sender, RoutedEventArgs e)
|
||||
{
|
||||
// Use a SaveFileDialog to let the user choose the export file location
|
||||
var saveFileDialog = new Microsoft.Win32.SaveFileDialog
|
||||
{
|
||||
Filter = "Text Files (*.txt)|*.txt|All Files (*.*)|*.*",
|
||||
DefaultExt = "txt"
|
||||
};
|
||||
|
||||
if (saveFileDialog.ShowDialog() == true)
|
||||
{
|
||||
// Call the ExportConvertedFilesToFile method with the selected file path
|
||||
ExportConvertedLogFilesToFile(saveFileDialog.FileName);
|
||||
}
|
||||
}
|
||||
private async void DeleteConvertedFilesAsync()
|
||||
{
|
||||
// Show a confirmation dialog
|
||||
156
OfficeConverterCore/OfficeConverterCore.csproj
Normal file
156
OfficeConverterCore/OfficeConverterCore.csproj
Normal file
|
|
@ -0,0 +1,156 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk">
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net6.0-windows</TargetFramework>
|
||||
<OutputType>WinExe</OutputType>
|
||||
<IsWebBootstrapper>false</IsWebBootstrapper>
|
||||
<PublishUrl>D:\OneDrive - wyniger\Design & Development\Code\Publish\DocConvert\</PublishUrl>
|
||||
<Install>true</Install>
|
||||
<InstallFrom>Disk</InstallFrom>
|
||||
<UpdateEnabled>false</UpdateEnabled>
|
||||
<UpdateMode>Foreground</UpdateMode>
|
||||
<UpdateInterval>7</UpdateInterval>
|
||||
<UpdateIntervalUnits>Days</UpdateIntervalUnits>
|
||||
<UpdatePeriodically>false</UpdatePeriodically>
|
||||
<UpdateRequired>false</UpdateRequired>
|
||||
<MapFileExtensions>true</MapFileExtensions>
|
||||
<ApplicationRevision>5</ApplicationRevision>
|
||||
<ApplicationVersion>1.0.0.%2a</ApplicationVersion>
|
||||
<UseApplicationTrust>false</UseApplicationTrust>
|
||||
<PublishWizardCompleted>true</PublishWizardCompleted>
|
||||
<BootstrapperEnabled>true</BootstrapperEnabled>
|
||||
<GenerateAssemblyInfo>false</GenerateAssemblyInfo>
|
||||
<UseWindowsForms>true</UseWindowsForms>
|
||||
<UseWPF>true</UseWPF>
|
||||
<ImportWindowsDesktopTargets>true</ImportWindowsDesktopTargets>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestCertificateThumbprint>43955F90264C43EAA4330714374C483BFDF3B6C5</ManifestCertificateThumbprint>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ManifestKeyFile>OfficeConverter_TemporaryKey.pfx</ManifestKeyFile>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<GenerateManifests>true</GenerateManifests>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<SignManifests>true</SignManifests>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x64'">
|
||||
<OutputPath>bin\x64\Debug\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
|
||||
<OutputPath>bin\x64\Release\</OutputPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup>
|
||||
<ApplicationIcon>icons8-microsoft-office-480.ico</ApplicationIcon>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|AnyCPU'">
|
||||
<OutputPath>bin\Test\</OutputPath>
|
||||
<Optimize>true</Optimize>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Test|x64'">
|
||||
<OutputPath>bin\x64\Test\</OutputPath>
|
||||
<Optimize>true</Optimize>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Update="System">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.Data">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.IO.Compression.FileSystem">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.Numerics">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.Xml">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.Core">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
<Reference Update="System.Xml.Linq">
|
||||
<Private>True</Private>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="Themes\MetroDark\HowToApplyTheme.txt" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<COMReference Include="Microsoft.Office.Core">
|
||||
<Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
|
||||
<VersionMajor>2</VersionMajor>
|
||||
<VersionMinor>8</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.Excel">
|
||||
<Guid>{00020813-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>1</VersionMajor>
|
||||
<VersionMinor>9</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.PowerPoint">
|
||||
<Guid>{91493440-5A91-11CF-8700-00AA0060263B}</Guid>
|
||||
<VersionMajor>2</VersionMajor>
|
||||
<VersionMinor>12</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="Microsoft.Office.Interop.Word">
|
||||
<Guid>{00020905-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>8</VersionMajor>
|
||||
<VersionMinor>7</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
<COMReference Include="VBIDE">
|
||||
<Guid>{0002E157-0000-0000-C000-000000000046}</Guid>
|
||||
<VersionMajor>5</VersionMajor>
|
||||
<VersionMinor>3</VersionMinor>
|
||||
<Lcid>0</Lcid>
|
||||
<WrapperTool>primary</WrapperTool>
|
||||
<Isolated>False</Isolated>
|
||||
<EmbedInteropTypes>True</EmbedInteropTypes>
|
||||
</COMReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<WCFMetadata Include="Connected Services\" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BootstrapperPackage Include=".NETFramework,Version=v4.8.1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>Microsoft .NET Framework 4.8.1 %28x86 und x64%29</ProductName>
|
||||
<Install>true</Install>
|
||||
</BootstrapperPackage>
|
||||
<BootstrapperPackage Include="Microsoft.Net.Framework.3.5.SP1">
|
||||
<Visible>False</Visible>
|
||||
<ProductName>.NET Framework 3.5 SP1</ProductName>
|
||||
<Install>false</Install>
|
||||
</BootstrapperPackage>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Resource Include="icons8-microsoft-office-480.ico" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="Infragistics.Themes.MetroDark.Wpf" Version="1.0.0" />
|
||||
<PackageReference Include="Microsoft.CSharp" Version="4.7.0" />
|
||||
<PackageReference Include="System.ComponentModel.Composition" Version="8.0.0" />
|
||||
<PackageReference Include="System.Data.DataSetExtensions" Version="4.5.0" />
|
||||
<PackageReference Include="System.Runtime.Handles" Version="4.3.0" />
|
||||
<PackageReference Include="Microsoft.NETCore.Platforms" Version="6.0.11" />
|
||||
<PackageReference Include="System.Diagnostics.DiagnosticSource" Version="6.0.1" />
|
||||
<PackageReference Include="System.Runtime.CompilerServices.Unsafe" Version="6.0.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
Before Width: | Height: | Size: 5.3 KiB After Width: | Height: | Size: 5.3 KiB |
16
README.md
16
README.md
|
|
@ -1,3 +1,15 @@
|
|||
Converts Office Documents in '97-2003 Format (.doc, .xls, .ppt) to new Format (.docx, .xlsx, .pptx) using Microsoft interop libraries.
|
||||
OfficeConverter
|
||||
Converts Office Documents in '97-2003 Format (.doc, .xls, .ppt, .dot, .xlt) to new Format (.docx, .xlsx, .pptx, .dotx, .xltx) using Microsoft interop libraries.
|
||||
|
||||
Latest Relase: https://github.com/netquick/OfficeConverter/blob/master/OfficeConverter/OfficeConverter.exe
|
||||
|
||||
Developed in Visual Studio Community Edition 2022 with .NET 6
|
||||
|
||||

|
||||
|
||||
|
||||
Latest Relase: https://github.com/netquick/OfficeConverter/releases/download/office/OfficeConverterCore.exe
|
||||
|
||||
Version Log: v1.01:
|
||||
Added logic to convert templates from Word (.dot to .dotx) and Excel (.xlt to xltx)
|
||||
Added log window with export function
|
||||
Fixed bugs crashing on corrupted files
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user