Я пытаюсь автоматизировать Excel через C#. Я следовал всем инструкциям от Microsoft о том, как сделать это, но я все еще изо всех сил пытаюсь отказаться от окончательной ссылки, чтобы превзойти его, чтобы закрыть и позволить GC собирать его. < /P>
Пример кода следует. Когда я комментирую кодовый блок, который содержит строки, аналогичные: < /p>
Sheet.Cells[iRowCount, 1] = data["fullname"].ToString();
< /code>
Затем файл сохраняет и Excel уходит. В противном случае файл сохраняет, но Excel остается запущенным в процессе. В следующий раз, когда этот код запускается, он создает новый экземпляр, и они в конечном итоге накапливаются. < /P>
Любая помощь ценится. Спасибо. Excel.Application xl = null;
Excel._Workbook wBook = null;
Excel._Worksheet wSheet = null;
Excel.Range range = null;
object m_objOpt = System.Reflection.Missing.Value;
try
{
// open the template
xl = new Excel.Application();
wBook = (Excel._Workbook)xl.Workbooks.Open(excelTemplatePath + _report.ExcelTemplate, false, false, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
wSheet = (Excel._Worksheet)wBook.ActiveSheet;
int iRowCount = 2;
// enumerate and drop the values straight into the Excel file
while (data.Read())
{
wSheet.Cells[iRowCount, 1] = data["fullname"].ToString();
wSheet.Cells[iRowCount, 2] = data["brand"].ToString();
wSheet.Cells[iRowCount, 3] = data["agency"].ToString();
wSheet.Cells[iRowCount, 4] = data["advertiser"].ToString();
wSheet.Cells[iRowCount, 5] = data["product"].ToString();
wSheet.Cells[iRowCount, 6] = data["comment"].ToString();
wSheet.Cells[iRowCount, 7] = data["brief"].ToString();
wSheet.Cells[iRowCount, 8] = data["responseDate"].ToString();
wSheet.Cells[iRowCount, 9] = data["share"].ToString();
wSheet.Cells[iRowCount, 10] = data["status"].ToString();
wSheet.Cells[iRowCount, 11] = data["startDate"].ToString();
wSheet.Cells[iRowCount, 12] = data["value"].ToString();
iRowCount++;
}
DirectoryInfo saveTo = Directory.CreateDirectory(excelTemplatePath + _report.FolderGuid.ToString() + "\\");
_report.ReportLocation = saveTo.FullName + _report.ExcelTemplate;
wBook.Close(true, _report.ReportLocation, m_objOpt);
wBook = null;
}
catch (Exception ex)
{
LogException.HandleException(ex);
}
finally
{
NAR(wSheet);
if (wBook != null)
wBook.Close(false, m_objOpt, m_objOpt);
NAR(wBook);
xl.Quit();
NAR(xl);
GC.Collect();
}
private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch { }
finally
{
o = null;
}
}
< /code>
update < /h2>
Независимо от того, что я пытаюсь, метод «чистый» или метод «уродливой» (см. Ответы ниже), экземпляр Excel по -прежнему видит, как только эта строка достигнет: < /p>
wSheet.Cells[iRowCount, 1] = data["fullname"].ToString();
< /code>
Если я прокомментирую эту строку (и другие подобные под ним, очевидно) приложение Excel изящно выходит. Как только одна строка на вышеупомянутую, не будет неуместна, Excel наткнулся. Я забыл упомянуть, что это сервис Windows, но это не должно иметь значения, не должно ли? < /P>
Подробнее здесь: https://stackoverflow.com/questions/104 ... g-instance
C# и Excel Automation - заканчивая экземпляр работы ⇐ C#
Место общения программистов C#
-
Anonymous
1752803516
Anonymous
Я пытаюсь автоматизировать Excel через C#. Я следовал всем инструкциям от Microsoft о том, как сделать это, но я все еще изо всех сил пытаюсь отказаться от окончательной ссылки, чтобы превзойти его, чтобы закрыть и позволить GC собирать его. < /P>
Пример кода следует. Когда я комментирую кодовый блок, который содержит строки, аналогичные: < /p>
Sheet.Cells[iRowCount, 1] = data["fullname"].ToString();
< /code>
Затем файл сохраняет и Excel уходит. В противном случае файл сохраняет, но Excel остается запущенным в процессе. В следующий раз, когда этот код запускается, он создает новый экземпляр, и они в конечном итоге накапливаются. < /P>
Любая помощь ценится. Спасибо. Excel.Application xl = null;
Excel._Workbook wBook = null;
Excel._Worksheet wSheet = null;
Excel.Range range = null;
object m_objOpt = System.Reflection.Missing.Value;
try
{
// open the template
xl = new Excel.Application();
wBook = (Excel._Workbook)xl.Workbooks.Open(excelTemplatePath + _report.ExcelTemplate, false, false, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt, m_objOpt);
wSheet = (Excel._Worksheet)wBook.ActiveSheet;
int iRowCount = 2;
// enumerate and drop the values straight into the Excel file
while (data.Read())
{
wSheet.Cells[iRowCount, 1] = data["fullname"].ToString();
wSheet.Cells[iRowCount, 2] = data["brand"].ToString();
wSheet.Cells[iRowCount, 3] = data["agency"].ToString();
wSheet.Cells[iRowCount, 4] = data["advertiser"].ToString();
wSheet.Cells[iRowCount, 5] = data["product"].ToString();
wSheet.Cells[iRowCount, 6] = data["comment"].ToString();
wSheet.Cells[iRowCount, 7] = data["brief"].ToString();
wSheet.Cells[iRowCount, 8] = data["responseDate"].ToString();
wSheet.Cells[iRowCount, 9] = data["share"].ToString();
wSheet.Cells[iRowCount, 10] = data["status"].ToString();
wSheet.Cells[iRowCount, 11] = data["startDate"].ToString();
wSheet.Cells[iRowCount, 12] = data["value"].ToString();
iRowCount++;
}
DirectoryInfo saveTo = Directory.CreateDirectory(excelTemplatePath + _report.FolderGuid.ToString() + "\\");
_report.ReportLocation = saveTo.FullName + _report.ExcelTemplate;
wBook.Close(true, _report.ReportLocation, m_objOpt);
wBook = null;
}
catch (Exception ex)
{
LogException.HandleException(ex);
}
finally
{
NAR(wSheet);
if (wBook != null)
wBook.Close(false, m_objOpt, m_objOpt);
NAR(wBook);
xl.Quit();
NAR(xl);
GC.Collect();
}
private void NAR(object o)
{
try
{
System.Runtime.InteropServices.Marshal.ReleaseComObject(o);
}
catch { }
finally
{
o = null;
}
}
< /code>
update < /h2>
Независимо от того, что я пытаюсь, метод «чистый» или метод «уродливой» (см. Ответы ниже), экземпляр Excel по -прежнему видит, как только эта строка достигнет: < /p>
wSheet.Cells[iRowCount, 1] = data["fullname"].ToString();
< /code>
Если я прокомментирую эту строку (и другие подобные под ним, очевидно) приложение Excel изящно выходит. Как только одна строка на вышеупомянутую, не будет неуместна, Excel наткнулся. Я забыл упомянуть, что это сервис Windows, но это не должно иметь значения, не должно ли? < /P>
Подробнее здесь: [url]https://stackoverflow.com/questions/1041266/c-sharp-and-excel-automation-ending-the-running-instance[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия