Экспорт данных, чтобы преуспеть в C # - PullRequest
2 голосов
/ 26 мая 2011

У меня есть функция, которая экспортирует данные набора данных в таблицу Excel.он отлично работает на локальной машине, но когда я загружаю этот код на сервер, он не работает ....

код файла:

    using Excel = Microsoft.Office.Interop.Excel;
    using System.Reflection;
    using System.Drawing;
    using System.ComponentModel;
    using System.Windows.Forms;

     string FilePath = ConfigurationManager.AppSettings["dataqueryfile"]
                 + "dataquery_" + DateTime.Now.ToString("yyyyMMddhhmm") ;


                Excel.Application oXL;
                Excel.Workbook oWB;
                Excel.Worksheet oSheet;
                Excel.Range oRange;

                // Start Excel and get Application object. 
                oXL = new Excel.Application();

                // Set some properties 
                oXL.Visible = true;
                oXL.DisplayAlerts = false;

                // Get a new workbook. 
                oWB = oXL.Workbooks.Add(Missing.Value);


                // Get the active sheet 
                oSheet = (Excel.Worksheet)oWB.ActiveSheet;
                oSheet.Name = "DataQuery";

                // Process the DataTable 
                DataTable dt = ds.Tables[0];

                int rowCount = 1;
                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 == 2)
                        {
                            oSheet.Cells[1, i] = dt.Columns[i - 1].ColumnName;
                        }
                        oSheet.Cells[rowCount, i] = dr[i - 1].ToString();
                    }
                }

                // Resize the columns 
                oRange = oSheet.get_Range(oSheet.Cells[1, 1],
                              oSheet.Cells[rowCount, dt.Columns.Count]);
                oRange.EntireColumn.AutoFit();

                // Save the sheet and close 
                oSheet = null;
                oRange = null;


                oWB.SaveAs(FilePath + ".xls", Excel.XlFileFormat.xlWorkbookNormal,
                    Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                    Excel.XlSaveAsAccessMode.xlExclusive,
                    Missing.Value, Missing.Value, Missing.Value,
                    Missing.Value, Missing.Value);
                oWB.Close(Missing.Value, Missing.Value, Missing.Value);
                oWB = null;
                oXL.Quit();

                // Clean up 
                // NOTE: When in release mode, this does the trick 
                GC.WaitForPendingFinalizers();
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();

файл веб-конфигурации:

      <add key="dataqueryfile" value="C:\navin\"/>
      <add assembly="Microsoft.Office.Interop.Excel, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
  <add assembly="office, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
            <add assembly="Microsoft.Vbe.Interop, Version=11.0.0.0, Culture=neutral, PublicKeyToken=71E9BCE111E9429C"/>
            <add assembly="stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>

отредактировано:

                da = new SqlDataAdapter();
                conn.Open();
                da.SelectCommand = command;
                da.Fill(ds);
                ds.WriteXml("c:\\Customers.xml");

когда я выполняю решение из локальной системы, значения набора данных копируются в файл xml вместе с заголовком столбца .. затем я переместил файлы в виртуальный каталог в папке inetpub,через диспетчер iis я просмотрел виртуальный каталог и запустил ту же страницу, XML-файл сохраняется по тому же пути, но без заголовка столбца :( .. затем я открыл эту же страницу с другого компьютера через URL (через IP-адрес inetrnal)но XML-файл не сохраняется на машине .. Пожалуйста, помогите мне ..

спасибо n *

T.Navin

1 Ответ

1 голос
/ 26 мая 2011

Настоятельно не рекомендуется автоматизировать Word или Excel в службах, но некоторые соображения по этому поводу можно прочитать здесь . Прежде всего, вы можете попробовать настроить службу для работы в качестве локальной системы. Другая вещь, с которой можно поиграть, это найти Excel в:

Панель управления - Администрирование - Службы компонентов - Службы компонентов - Мой компьютер - Конфигурация DCOM

Там вы можете установить привилегии, под которыми может работать Excel, и т.д ...

Но, я должен сказать, что даже если все настроено правильно, оно все равно может не работать. У нас были серьезные трудности с этим, когда какой-то сервер работал, и точно такая же конфигурация не работала на каком-то другом сервере ...

Итак, я бы посоветовал (поскольку ваша потребность на самом деле не требует автоматизации), чтобы создать файлы Excel самостоятельно, используя XSLT для создания SpreadSheetML - это на самом деле проще, чем вы Сначала подумаю, но это действительно хороший способ. Попробуйте сохранить свой файл XLS в формате Office XML 2003 и посмотрите на структуру XML - если вы посмотрите на тело, это действительно не так сложно. Когда вы создаете эти XML, Excel может открыть его, как и любой другой файл.

Другим способом (если вам не нравится использование XSL-преобразований) является использование Open XML Format SDK - мы обнаружили, что один из этих вариантов немного утомителен для Word ( нам нужны были некоторые нюансы), поэтому мы все еще предпочитаем XSLT, но для Excel это может оказаться довольно простым. С помощью этого SDK вы даже можете сохранить в формате XSLX / DOCX (который на самом деле очень похож на ProcessingML, но упакован в zip)

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...