Перейдите на использование инструмента Spread Sheet Gear из Microsoft Office Interop OWC11

Я хочу изменить свой код на Spread Sheet Gear из Microsoft Office Interop OWC11. Тем не менее, я сталкиваюсь с некоторыми проблемами в моем коде. Показанный здесь код использует Microsoft.Office.Interop.Owc11, я пробую использовать Spread Sheet Gear с некоторыми IWorkBook, IWorkSheet, используя SpreadsheetGear; и т.д. Но я все еще не могу измениться и получаю ошибку, которая делает мой файл грязным. Можете ли вы помочь мне в этом вопросе? Изменение следующего кода на SpreadsheetGear

TemplateManagerBLTest.cs

using Microsoft.Office.Interop.Owc11;

public void FindRangeTest()
        {
            TemplateManagerBL target = new TemplateManagerBL();
            TestBusinessLogic.BusinessLogic_TemplateManagerBLAccessor accessor = new TestBusinessLogic.BusinessLogic_TemplateManagerBLAccessor(target);

            string rangeKeyword = "END";
            AxSpreadsheet currentSpreadSheet = GetTestSheet("..\\..\\..\\TestBusinessLogic\\TemplateManagerTestData\\TEST_TemplateForGetRangeTest.xml");

            int expectedCol, expectedRow;
            expectedCol = 1;
            expectedRow = 306;
            TemplateManagerBL.Coordinate actual;

            actual = accessor.FindRange(rangeKeyword, currentSpreadSheet);

            Assert.AreEqual(expectedCol, actual.Column, "FindRange did not return the expected column value.");
            Assert.AreEqual(expectedRow, actual.Row, "FindRange did not return the expected column value.");

        }

Внутри GetTestSheet

#region "Test Data Methods"
        private AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet GetTestSheet(string filePath)
        {
            AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet currentSpreadSheet;
            string tXML = "";
            TextReader textReader = new StreamReader(@filePath);

            while (textReader.ReadLine() != null)
            {
                tXML = textReader.ReadToEnd();
            }
            TemplateControl tc = new TemplateControl();

            currentSpreadSheet = new AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet();
            currentSpreadSheet = tc.SpreadSheet;
            currentSpreadSheet.XMLData = tXML;
            return currentSpreadSheet;
        }

Внутри FindRange

internal global::BusinessLogic.TemplateManagerBL.Coordinate FindRange(string rangeKeyword, global::AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet currentSpreadSheet)
        {
            object[] args = new object[] {
                rangeKeyword,
                currentSpreadSheet};
            global::BusinessLogic.TemplateManagerBL.Coordinate ret = ((global::BusinessLogic.TemplateManagerBL.Coordinate)(m_privateObject.Invoke("FindRange", new System.Type[] {
                    typeof(string),
                    typeof(global::AxMicrosoft.Office.Interop.Owc11.AxSpreadsheet)}, args)));
            return ret;
        }

1 ответ

Я не знаком с OWC, поэтому не могу точно переписать ваш код ниже, но ниже приведен код SpreadsheetGear, который откроет файл Excel и попытается найти какое-либо ключевое слово внутри данного листа:

using SpreadsheetGear;

...

// Open a workbook.
// Note SpreadsheetGear opens XLS/XLSX/XLSM as well as comma- and tab-delimited
// files.  SpreadsheetGear does not support plain XML files, which you appear
// to use in your example code.
IWorkbook workbook = Factory.GetWorkbook(@"c:\path\to\workbook.xlsx");

// For convenience, make a local variable to the worksheet you are interested in.
IWorksheet worksheet = workbook.Worksheets["Sheet1"];

// Use IRange.Find(...) to look for a keyword within the "used range" of the sheet.
// Please see the documentation for IRange.Find(...) for more detailed information
// on each paramater option.
IRange foundCell = worksheet.UsedRange.Find("END", null, FindLookIn.Values, LookAt.Whole, 
    SearchOrder.ByColumns, SearchDirection.Next, false);

if(foundCell != null)
{
    // Note that SpreadsheetGear Row/Column indexes start at 0 and not 1
    int foundRow = foundCell.Row;
    int foundCol = foundCell.Column;

    // Compare to what you expected...
}
Другие вопросы по тегам