Ниже приведен код, который выдает ошибку при размещении на серверном ПК.
try
{
//Variable Declarations
Microsoft.Office.Interop.Excel._Workbook oWB;
Microsoft.Office.Interop.Excel.Application oXL = null;
Microsoft.Office.Interop.Excel.Workbook workbook;
Microsoft.Office.Interop.Excel.Worksheet NwSheet = null;
Microsoft.Office.Interop.Excel.Worksheet NwSheetSummary;
Microsoft.Office.Interop.Excel.Worksheet NwSheetIndividualTotal;
Microsoft.Office.Interop.Excel.Range ShtRange;
Microsoft.Office.Interop.Excel.Sheets sheets;
Microsoft.Office.Interop.Excel.ApplicationClass excel = new Microsoft.Office.Interop.Excel.ApplicationClass();
excel.Workbooks.Add(System.Reflection.Missing.Value);
excel.Quit();
excel = null;
//Opening Excel file(myData.xlsx)
workbook = excel.Workbooks.Open(System.Web.HttpContext.Current.Server.MapPath("~/Template/Template.xlsx"), Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
sheets = workbook.Worksheets;
foreach (Worksheet ws in sheets)
{
if (ws.Index == 5)
NwSheet = ws;
if (ws.Index == 1)
NwSheetSummary = ws;
if (ws.Index == 4)
NwSheetIndividualTotal = ws;
}
//Reading Excel file.
//Creating datatable to read the containt of the Sheet in File.
System.Data.DataTable dt = export.Tables[0];
int rowCount = 8;
if (dt.Columns.Contains("RowID"))
dt.Columns.Remove("RowID");
if (dt.Columns.Contains("Week"))
dt.Columns.Remove("Week");
if (dt.Columns.Contains("Year"))
dt.Columns.Remove("Year");
foreach (DataRow dr in dt.Rows)
{
rowCount += 1;
for (int i = 1; i < dt.Columns.Count + 1; i++)
{
// Add the header the first time through
if (rowCount == 8)
{
//NwSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
}
NwSheet.Cells[rowCount, i] = dr[i - 1].ToString();
}
}
for (int count = 0; count <= dt.Rows.Count; count++)
{
// NwSheet.get_Range("A9", Missing.Value).Value2 = dt.Rows[count]["SlNo"].ToString();
}
workbook.RefreshAll();
String path = Convert.ToString(ConfigurationManager.AppSettings["DefaultPath"]);
CreateFileOrFolder(workbook, week);
NwSheet = null;
ShtRange = null;
workbook.Close(Missing.Value, Missing.Value, Missing.Value);
workbook = null;
oXL.Quit();
excel.Quit();
//appExl.Quit();
status = true;
}
Теперь он работает нормально на моем локальном ПК с Interop Excel 12.0
, но не при размещении на сервере с таким же 12.0
.
получена ошибка
Не удалось получить фабрику класса COM для компонента с CLSID {00024500-0000-0000-C000-000000000046} из-за следующей ошибки: 80070005.
После поиска ошибки я прошел через другие форумы, и они упомянули give rights to Network Services to Microsoft Excel Application in dcomcnfg
. Я сделал то же самое, но это бесполезно.
Это не сработало, и я получил ту же ошибку.
Подобно :-
Конфигурация dcomcnfge
Который говорит: -
Перейти в Панель управления -> Администрирование -> Службы компонентов -> Компьютеры -> Мой компьютер -> Конфигурация DCOM -> Приложение Microsoft Excel. -> Щелкните правой кнопкой мыши, чтобы получить диалоговое окно свойств. Перейдите на вкладку Безопасность и настройте соответствующие разрешения.
Я пытался дать все возможные права, но ошибка сохраняется. !!
Пожалуйста, помогите ..