ComAutoWrapper 1.1.5.5

dotnet add package ComAutoWrapper --version 1.1.5.5
                    
NuGet\Install-Package ComAutoWrapper -Version 1.1.5.5
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="ComAutoWrapper" Version="1.1.5.5" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="ComAutoWrapper" Version="1.1.5.5" />
                    
Directory.Packages.props
<PackageReference Include="ComAutoWrapper" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add ComAutoWrapper --version 1.1.5.5
                    
#r "nuget: ComAutoWrapper, 1.1.5.5"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package ComAutoWrapper@1.1.5.5
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=ComAutoWrapper&version=1.1.5.5
                    
Install as a Cake Addin
#tool nuget:?package=ComAutoWrapper&version=1.1.5.5
                    
Install as a Cake Tool

ComAutoWrapper

ComAutoWrapper egy minimalista és oktató jellegű C# wrapper könyvtár, amely megkönnyíti a COM-objektumok késői kötésű (late binding) használatát IDispatch alapon – külső interop DLL nélkül.

A cél: egyszerűen és biztonságosan vezérelhessük az Excel, Word vagy más COM-alapú alkalmazásokat .NET-ből.


🎯 Fő előnyök

  • Könnyű használat – magas szintű metódusokkal
  • Interop DLL-mentes – nem kell Microsoft.Office.Interop referenciát hozzáadni
  • Hibakezelés és felszabadítás beépítve
  • Excel & Word példák dokumentáltan

📦 Telepítés

A NuGet csomag hamarosan elérhető:

dotnet add package ComAutoWrapper
Fejlesztés alatt, lokális .nupkg is használható addig.

🔧 Fő komponensek
Osztály	Szerepe
ComInvoker	Property/metódus elérés late binding-gel
ComReleaseHelper	COM-objektumok nyomon követése és felszabadítása (FinalReleaseComObject)
ComValueConverter	.NET típusok → COM-kompatibilis (pl. Color → OLE_COLOR)
ComRotHelper	Excel példányok listázása a Running Object Table-ből
ExcelHelper	Workbook / Worksheet / Range lekérdezés
ExcelSelectionHelper	Kijelölt tartomány kezelése, koordináta lekérdezés
ExcelStyleHelper	Cella háttérszínezés
WordHelper	Teljes minta Word táblázat beszúrására
WordStyleHelper	Word Range formázása (pl. félkövér + háttérszín)
ComTypeInspector	COM tagok introspektív lekérdezése ITypeInfo alapján

🧪 Példák
📘 Excel – cellák formázása
csharp
var app = Activator.CreateInstance(Type.GetTypeFromProgID("Excel.Application"));
ComInvoker.SetProperty(app!, "Visible", true);

var workbooks = ComInvoker.GetProperty<object>(app!, "Workbooks");
ComInvoker.CallMethod(workbooks!, "Add");

var apps = ComRotHelper.GetExcelApplications();

foreach (var excel in apps)
{
    foreach (var wb in ExcelHelper.GetWorkbooks(excel))
    {
        foreach (var sheet in ExcelHelper.GetWorksheets(wb))
        {
            var range = ExcelHelper.GetRange(sheet, "B2:D2");
            ComInvoker.SetProperty(range, "Value", "Teszt");

            var interior = ComInvoker.GetProperty<object>(range, "Interior");
            int szin = ComValueConverter.ToOleColor(System.Drawing.Color.LightGreen);
            ComInvoker.SetProperty(interior!, "Color", szin);

            ComReleaseHelper.Track(range);
            ComReleaseHelper.Track(interior);
        }
        ComInvoker.SetProperty(wb, "Saved", ComValueConverter.ToComBool(true));
        ComInvoker.CallMethod(wb, "Close", ComValueConverter.ToComBool(true));
        ComReleaseHelper.Track(wb);
    }
    ComInvoker.CallMethod(excel, "Quit");
    ComReleaseHelper.Track(excel);
}
ComReleaseHelper.ReleaseAll();
📝 Word – táblázat beszúrása és formázása
csharp
var wordApp = Activator.CreateInstance(Type.GetTypeFromProgID("Word.Application"));
ComInvoker.SetProperty(wordApp!, "Visible", true);
ComInvoker.SetProperty(wordApp!, "DisplayAlerts", false);

var documents = ComInvoker.GetProperty<object>(wordApp!, "Documents");
var doc = ComInvoker.CallMethod<object>(documents!, "Add");

var range = ComInvoker.GetProperty<object>(doc!, "Content");
var tables = ComInvoker.GetProperty<object>(doc!, "Tables");
var table = ComInvoker.CallMethod<object>(tables!, "Add", range, 3, 3);

for (int row = 1; row <= 3; row++)
{
    for (int col = 1; col <= 3; col++)
    {
        var cell = ComInvoker.CallMethod<object>(table, "Cell", row, col);
        var cellRange = ComInvoker.GetProperty<object>(cell, "Range");
        ComInvoker.SetProperty(cellRange, "Text", $"R{row}C{col}");

        if (row == 1)
        {
            WordStyleHelper.ApplyStyle(
                cellRange,
                fontColor: ComValueConverter.ToOleColor(Color.White),
                backgroundColor: ComValueConverter.ToOleColor(Color.DarkRed),
                bold: true
            );
        }

        ComReleaseHelper.Track(cell);
        ComReleaseHelper.Track(cellRange);
    }
}

ComInvoker.SetProperty(doc, "Saved", ComValueConverter.ToComBool(true));
ComInvoker.CallMethod(doc, "Close", ComValueConverter.ToComBool(false));
ComInvoker.CallMethod(wordApp!, "Quit");

ComReleaseHelper.Track(table);
ComReleaseHelper.Track(tables);
ComReleaseHelper.Track(doc);
ComReleaseHelper.Track(documents);
ComReleaseHelper.Track(wordApp);
ComReleaseHelper.ReleaseAll();

---

🧹 ComReleaseHelper – Új metódusok WPF / hosszú életciklusú alkalmazásokhoz
A ComReleaseHelper feladata a COM objektumok nyomon követése és biztonságos felszabadítása. Az alábbi új metódusok lehetővé teszik a dinamikusabb kezelését is (pl. WPF UI esetén):

Metódus	Leírás
Track(object obj)	Hozzáadja a COM objektumot a felszabadítandók listájához.
ReleaseAll()	Felszabadítja az összes nyomon követett COM objektumot.
Clear()	Ürít minden nyilvántartott objektumot felszabadítás nélkül.
Reset()	Teljes újraindítás: először ReleaseAll(), majd Clear().
Remove(object obj)	Eltávolít egy konkrét objektumot a nyomon követésből.
IsTracked(object obj)	Igaz értéket ad vissza, ha az adott objektum épp nyomon van követve.

Példák
csharp
var range = ExcelHelper.GetRange(sheet, "A1:B2");
ComReleaseHelper.Track(range);

// ... felhasználás után mégsem kell menteni vagy felszabadítani:
ComReleaseHelper.Remove(range); // nem lesz felszabadítva

// Teljes lista törlése, de nem hív ReleaseComObject-et:
ComReleaseHelper.Clear();

// Biztonságos újrakezdés (felszabadítással együtt):
ComReleaseHelper.Reset();

// Ellenőrzés:
bool isTracked = ComReleaseHelper.IsTracked(range);
⚠️ Figyelem:
A Clear() nem hívja meg a Marshal.FinalReleaseComObject-et – csak eltávolítja az objektumokat a listából.
A Reset() viszont előbb felszabadít, majd ürít is.



🔐 License
MIT License
Szabadon használható oktatási és üzleti célra is.
Lásd: LICENSE

🙋‍♂️ Kinek ajánlott?
.NET fejlesztőknek, akik nem akarnak Office Interop DLL-t használni

Oktatóknak, akik bemutatnák a IDispatch-alapú elérést

Haladó automatizálóknak, akik minimalista, de stabil COM API-t keresnek

Product Compatible and additional computed target framework versions.
.NET net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net9.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
1.1.5.5 161 7/26/2025
1.1.5.4 489 7/23/2025
1.1.5.3 188 7/20/2025
1.1.5.2 27 7/19/2025
1.1.5.1 22 7/19/2025
1.1.5 26 7/19/2025
1.1.4 120 7/16/2025
1.1.3.2 136 7/15/2025
1.1.3.1 106 7/12/2025
1.1.3 95 7/12/2025
1.1.2 139 7/10/2025
1.1.1 145 7/6/2025
1.1.0 142 6/23/2025
1.0.0 143 6/23/2025