Changed all Excel access to read-only access if sheet is actually opened for reading.

This should avoid errors when the sheet is still open in Excel.
This commit is contained in:
Daniel Schick 2026-01-26 13:48:17 +01:00
parent 782ae3138e
commit d02cb0d56b
14 changed files with 66 additions and 22 deletions

View File

@ -338,7 +338,8 @@ namespace ENI2.Controls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row

View File

@ -1051,7 +1051,8 @@ namespace ENI2.DetailViewControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
@ -1121,7 +1122,8 @@ namespace ENI2.DetailViewControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
@ -1192,7 +1194,8 @@ namespace ENI2.DetailViewControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); var worksheet = workbook.Worksheet(1);
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present
@ -1268,7 +1271,8 @@ namespace ENI2.DetailViewControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); var worksheet = workbook.Worksheet(1);
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present

View File

@ -485,7 +485,8 @@ namespace ENI2.DetailViewControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows

View File

@ -9,6 +9,7 @@ using System.Globalization;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Drawing; using System.Drawing;
using System.Linq; using System.Linq;
using System.IO;
namespace ENI2.Excel namespace ENI2.Excel
{ {
@ -22,6 +23,7 @@ namespace ENI2.Excel
protected CountryMode _countryMode = CountryMode.DE; protected CountryMode _countryMode = CountryMode.DE;
protected XLWorkbook _workBook; protected XLWorkbook _workBook;
protected FileStream _workBookStream;
protected Dictionary<string, IXLDefinedName> _nameDict; protected Dictionary<string, IXLDefinedName> _nameDict;
protected ILog _log; protected ILog _log;
@ -101,6 +103,12 @@ namespace ENI2.Excel
} }
} }
protected void OpenWorkbookReadOnly(string path)
{
_workBookStream = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
_workBook = new XLWorkbook(_workBookStream);
}
private static double? ParseAnyDouble(string val) private static double? ParseAnyDouble(string val)
{ {
double? result = null; double? result = null;
@ -212,6 +220,11 @@ namespace ENI2.Excel
_workBook.Dispose(); _workBook.Dispose();
_workBook = null; _workBook = null;
} }
if (_workBookStream != null)
{
_workBookStream.Dispose();
_workBookStream = null;
}
} }
catch (Exception ex) catch (Exception ex)
{ {
@ -222,4 +235,4 @@ namespace ENI2.Excel
#endregion #endregion
} }
} }

View File

@ -53,8 +53,10 @@ namespace ENI2.Excel
{ {
File.Copy(targetPath, comparisonFileName, true); File.Copy(targetPath, comparisonFileName, true);
using (var sourceWorkbook = new XLWorkbook(sourcePath)) using (var sourceStream = new FileStream(sourcePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var comparisonWorkbook = new XLWorkbook(comparisonFileName)) using (var sourceWorkbook = new XLWorkbook(sourceStream))
using (var comparisonStream = new FileStream(comparisonFileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var comparisonWorkbook = new XLWorkbook(comparisonStream))
{ {
// Es werden Zellen der "used range" miteinander verglichen // Es werden Zellen der "used range" miteinander verglichen
foreach (var sourceSheet in sourceWorkbook.Worksheets) foreach (var sourceSheet in sourceWorkbook.Worksheets)
@ -152,4 +154,4 @@ namespace ENI2.Excel
return comparisonFileName; return comparisonFileName;
} }
} }
} }

View File

@ -26,7 +26,8 @@ namespace ENI2.Excel
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); var worksheet = workbook.Worksheet(1);
var rows = worksheet.RangeUsed().RowsUsed(); var rows = worksheet.RangeUsed().RowsUsed();
@ -144,7 +145,8 @@ namespace ENI2.Excel
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); var worksheet = workbook.Worksheet(1);
var rows = worksheet.RangeUsed().RowsUsed(); var rows = worksheet.RangeUsed().RowsUsed();

View File

@ -32,7 +32,7 @@ namespace ENI2.Excel
public ExcelReader(string filePath, bool createNameFields = true) public ExcelReader(string filePath, bool createNameFields = true)
{ {
this._workBook = new XLWorkbook(filePath); this.OpenWorkbookReadOnly(filePath);
if (createNameFields) if (createNameFields)
this.InitNameFields(); this.InitNameFields();
@ -793,4 +793,4 @@ namespace ENI2.Excel
#endregion Dakosy-specific functions #endregion Dakosy-specific functions
} }
} }

View File

@ -26,7 +26,7 @@ namespace ENI2.Excel
if (isRefSheet) filename = @"Excel\Reference_Sheet_DE.xlsx"; if (isRefSheet) filename = @"Excel\Reference_Sheet_DE.xlsx";
string refFilePath = System.IO.Path.Combine(Environment.CurrentDirectory, filename); string refFilePath = System.IO.Path.Combine(Environment.CurrentDirectory, filename);
this._workBook = new XLWorkbook(refFilePath); this.OpenWorkbookReadOnly(refFilePath);
this.InitNameFields(); this.InitNameFields();
} }
@ -1426,4 +1426,4 @@ namespace ENI2.Excel
#endregion #endregion
} }
} }

View File

@ -128,7 +128,8 @@ namespace ENI2.SheetDisplayControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present

View File

@ -168,7 +168,8 @@ namespace ENI2.SheetDisplayControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present

View File

@ -146,7 +146,8 @@ namespace ENI2.SheetDisplayControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present

View File

@ -128,7 +128,8 @@ namespace ENI2.SheetDisplayControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present var rows = worksheet.RangeUsed().RowsUsed().Skip(1); // Skip header row if present

View File

@ -520,7 +520,8 @@ namespace ENI2.SheetDisplayControls
{ {
try try
{ {
using (var workbook = new XLWorkbook(ofd.FileName)) using (var stream = new FileStream(ofd.FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
using (var workbook = new XLWorkbook(stream))
{ {
var worksheet = workbook.Worksheet(1); // Get first worksheet var worksheet = workbook.Worksheet(1); // Get first worksheet
var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows var rows = worksheet.RangeUsed().RowsUsed().Skip(3); // Skip first three rows

View File

@ -36,7 +36,23 @@ namespace bsmd.ExcelReadService
this._excelApp.DisplayAlerts = false; this._excelApp.DisplayAlerts = false;
this._excelWorkbooks = _excelApp.Workbooks; this._excelWorkbooks = _excelApp.Workbooks;
this._portcall = _excelWorkbooks.Open(filePath, 0, true, 5, "", "", false, XlPlatform.xlWindows, "", false, false, 0, false, false, false); this._portcall = _excelWorkbooks.Open(
filePath,
UpdateLinks: 0,
ReadOnly: true,
Format: 5,
Password: "",
WriteResPassword: "",
IgnoreReadOnlyRecommended: true,
Origin: XlPlatform.xlWindows,
Delimiter: "",
Editable: false,
Notify: false,
Converter: 0,
AddToMru: false,
Local: false,
CorruptLoad: false);
this._portcall.ChangeFileAccess(XlFileAccess.xlReadOnly);
_nameDict = new Dictionary<string, Name>(); _nameDict = new Dictionary<string, Name>();
int bookCnt = 0; int bookCnt = 0;
foreach(Name name in _portcall.Names) foreach(Name name in _portcall.Names)