Перейдите на использование инструмента 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...
}