Это было работающим ... и я переместил код утилизации в блок finally, и теперь он каждый раз дает сбой.
У меня есть тестовая таблица с 4 записями, длиной 6 столбцов. Вот код, который я использую для его ввода. Это ASP .Net 3.5 на IIS 5 (мой компьютер) и на IIS 6 (веб-сервер).
Он взрывается в строке прямо перед перехватом: "values = (object [,]) range.Value2;" со следующей ошибкой:
11/2/2009 8:47:43 AM :: Not enough storage is available to complete this operation. (Exception from HRESULT: 0x8007000E (E_OUTOFMEMORY))
Есть идеи? Предложения? Я получил большую часть этого кода от codeproject, поэтому я понятия не имею, правильный ли это способ работы с Excel. Спасибо за любую помощь, вы можете предоставить.
Вот мой код:
Excel.ApplicationClass app = null;
Excel.Workbook book = null;
Excel.Worksheet sheet = null;
Excel.Range range = null;
object[,] values = null;
try
{
// Configure Excel
app = new Excel.ApplicationClass();
app.Visible = false;
app.ScreenUpdating = false;
app.DisplayAlerts = false;
// Open a new instance of excel with the uploaded file
book = app.Workbooks.Open(path);
// Get first worksheet in book
sheet = (Excel.Worksheet)book.Worksheets[1];
// Start with first cell on second row
range = sheet.get_Range("A2", Missing.Value);
// Get all cells to the right
range = range.get_End(Excel.XlDirection.xlToRight);
// Get all cells downwards
range = range.get_End(Excel.XlDirection.xlDown);
// Get address of bottom rightmost cell
string downAddress = range.get_Address(false, false, Excel.XlReferenceStyle.xlA1, Type.Missing, Type.Missing);
// Get complete range of data
range = sheet.get_Range("A2", downAddress);
// get 2d array of all data
values = (object[,])range.Value2;
}
catch (Exception e)
{
LoggingService.log(e.Message);
}
finally
{
// Clean up
range = null;
sheet = null;
if (book != null)
book.Close(false, Missing.Value, Missing.Value);
book = null;
if (app != null)
app.Quit();
app = null;
}
return values;