Heim > Backend-Entwicklung > C#.Net-Tutorial > Einführung in verschiedene Exportmethoden in C#

Einführung in verschiedene Exportmethoden in C#

黄舟
Freigeben: 2017-05-21 10:54:12
Original
1690 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich die relevanten Kenntnisse verschiedener Exportmethoden in C# vor und hat einen sehr guten Referenzwert. Schauen wir es uns mit dem folgenden Editor an

Die erste Methode: Verwenden von Microsoft.Office.Interop.Excel.dll

Zuerst Sie müssen Office Excel installieren, dann die Komponente Microsoft.Office.Interop.Excel.dll suchen und sie zur Referenz hinzufügen.


public void ExportExcel(DataTable dt)
    {
      if (dt != null)
      {
        Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

        if (excel == null)
        {
          return;
        }

        //设置为不可见,操作在后台执行,为 true 的话会打开 Excel
        excel.Visible = false;

        //打开时设置为全屏显式
        //excel.DisplayFullScreen = true;

        //初始化工作簿
        Microsoft.Office.Interop.Excel.Workbooks workbooks = excel.Workbooks;

        //新增加一个工作簿,Add()方法也可以直接传入参数 true
        Microsoft.Office.Interop.Excel.Workbook workbook = workbooks.Add(Microsoft.Office.Interop.Excel.XlWBATemplate.xlWBATWorksheet);
        //同样是新增一个工作簿,但是会弹出保存对话框
        //Microsoft.Office.Interop.Excel.Workbook workbook = excel.Application.Workbooks.Add(true);

        //新增加一个 Excel 表(sheet)
        Microsoft.Office.Interop.Excel.Worksheet worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];

        //设置表的名称
        worksheet.Name = dt.TableName;
        try
        {
          //创建一个单元格
          Microsoft.Office.Interop.Excel.Range range;

          int rowIndex = 1;    //行的起始下标为 1
          int colIndex = 1;    //列的起始下标为 1

          //设置列名
          for (int i = 0; i < dt.Columns.Count; i++)
          {
            //设置第一行,即列名
            worksheet.Cells[rowIndex, colIndex + i] = dt.Columns[i].ColumnName;

            //获取第一行的每个单元格
            range = worksheet.Cells[rowIndex, colIndex + i];

            //设置单元格的内部颜色
            range.Interior.ColorIndex = 33;

            //字体加粗
            range.Font.Bold = true;

            //设置为黑色
            range.Font.Color = 0;

            //设置为宋体
            range.Font.Name = "Arial";

            //设置字体大小
            range.Font.Size = 12;

            //水平居中
            range.HorizontalAlignment = Microsoft.Office.Interop.Excel.XlHAlign.xlHAlignCenter;

            //垂直居中
            range.VerticalAlignment = Microsoft.Office.Interop.Excel.XlVAlign.xlVAlignCenter;
          }

          //跳过第一行,第一行写入了列名
          rowIndex++;

          //写入数据
          for (int i = 0; i < dt.Rows.Count; i++)
          {
            for (int j = 0; j < dt.Columns.Count; j++)
            {
              worksheet.Cells[rowIndex + i, colIndex + j] = dt.Rows[i][j].ToString();
            }
          }

          //设置所有列宽为自动列宽
          //worksheet.Columns.AutoFit();

          //设置所有单元格列宽为自动列宽
          worksheet.Cells.Columns.AutoFit();
          //worksheet.Cells.EntireColumn.AutoFit();

          //是否提示,如果想删除某个sheet页,首先要将此项设为fasle。
          excel.DisplayAlerts = false;

          //保存写入的数据,这里还没有保存到磁盘
          workbook.Saved = true;

          //设置导出文件路径
          string path = HttpContext.Current.Server.MapPath("Export/");

          //设置新建文件路径及名称
          string savePath = path + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";

          //创建文件
          FileStream file = new FileStream(savePath, FileMode.CreateNew);

          //关闭释放流,不然没办法写入数据
          file.Close();
          file.Dispose();

          //保存到指定的路径
          workbook.SaveCopyAs(savePath);

          //还可以加入以下方法输出到浏览器下载
          FileInfo fileInfo = new FileInfo(savePath);
          OutputClient(fileInfo);
        }
        catch(Exception ex)
        {

        }
        finally
        {
          workbook.Close(false, Type.Missing, Type.Missing);
          workbooks.Close();

          //关闭退出
          excel.Quit();

          //释放 COM 对象
          Marshal.ReleaseComObject(worksheet);
          Marshal.ReleaseComObject(workbook);
          Marshal.ReleaseComObject(workbooks);
          Marshal.ReleaseComObject(excel);

          worksheet = null;
          workbook = null;
          workbooks = null;
          excel = null;
          GC.Collect();
        }
      }
    }

public void OutputClient(FileInfo file)
    {
      HttpContext.Current.Response.Buffer = true;

      HttpContext.Current.Response.Clear();
      HttpContext.Current.Response.ClearHeaders();
      HttpContext.Current.Response.ClearContent();

      HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";

      //导出到 .xlsx 格式不能用时,可以试试这个
      //HttpContext.Current.Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";

      HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xlsx", DateTime.Now.ToString("yyyy-MM-dd-HH-mm")));

      HttpContext.Current.Response.Charset = "GB2312";
      HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("GB2312");

      HttpContext.Current.Response.AddHeader("Content-Length", file.Length.ToString());

      HttpContext.Current.Response.WriteFile(file.FullName);
      HttpContext.Current.Response.Flush();
      HttpContext.Current.Response.Close();
    }
Nach dem Login kopieren

Die Leistung der ersten Methode ist wirklich wenig schmeichelhaft und weist zu viele Einschränkungen auf. Zuerst müssen Sie Office installieren (sofern es sich nicht auf Ihrem Computer befindet) und beim Exportieren den Pfad zum Speichern der Datei angeben. Die Ausgabe an den Browser zum Download ist natürlich auch möglich, sofern die geschriebenen Daten gespeichert wurden.

Zweite Methode: Verwenden Sie Aspose.Cells.dll

Dieses Aspose.Cells wird von der Firma Aspose gestartet, um Excel zu exportieren Das Die Steuerung ist unabhängig von Office oder kommerzieller Software und kostenlos.


public void ExportExcel(DataTable dt)
    {
      try
      {
        //获取指定虚拟路径的物理路径
        string path = HttpContext.Current.Server.MapPath("DLL/") + "License.lic";

        //读取 License 文件
        Stream stream = (Stream)File.OpenRead(path);

        //注册 License
        Aspose.Cells.License li = new Aspose.Cells.License();
        li.SetLicense(stream);

        //创建一个工作簿
        Aspose.Cells.Workbook workbook = new Aspose.Cells.Workbook();

        //创建一个 sheet 表
        Aspose.Cells.Worksheet worksheet = workbook.Worksheets[0];

        //设置 sheet 表名称
        worksheet.Name = dt.TableName;

        Aspose.Cells.Cell cell;

        int rowIndex = 0;  //行的起始下标为 0
        int colIndex = 0;  //列的起始下标为 0

        //设置列名
        for (int i = 0; i < dt.Columns.Count; i++)
        {
          //获取第一行的每个单元格
          cell = worksheet.Cells[rowIndex, colIndex + i];

          //设置列名
          cell.PutValue(dt.Columns[i].ColumnName);

          //设置字体
          cell.Style.Font.Name = "Arial";

          //设置字体加粗
          cell.Style.Font.IsBold = true;

          //设置字体大小
          cell.Style.Font.Size = 12;

          //设置字体颜色
          cell.Style.Font.Color = System.Drawing.Color.Black;

          //设置背景色
          cell.Style.BackgroundColor = System.Drawing.Color.LightGreen;
        }

        //跳过第一行,第一行写入了列名
        rowIndex++;

        //写入数据
        for (int i = 0; i < dt.Rows.Count; i++)
        {
          for (int j = 0; j < dt.Columns.Count; j++)
          {
            cell = worksheet.Cells[rowIndex + i, colIndex + j];

            cell.PutValue(dt.Rows[i][j]);
          }
        }

        //自动列宽
        worksheet.AutoFitColumns();

        //设置导出文件路径
        path = HttpContext.Current.Server.MapPath("Export/");

        //设置新建文件路径及名称
        string savePath = path + DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss") + ".xlsx";

        //创建文件
        FileStream file = new FileStream(savePath, FileMode.CreateNew);

        //关闭释放流,不然没办法写入数据
        file.Close();
        file.Dispose();

        //保存至指定路径
        workbook.Save(savePath);

        //或者使用下面的方法,输出到浏览器下载。
        //byte[] bytes = workbook.SaveToStream().ToArray();
        //OutputClient(bytes);

        worksheet = null;
        workbook = null;
      }
      catch(Exception ex)
      {
      }
    }
public void OutputClient(byte[] bytes)
    {
      HttpContext.Current.Response.Buffer = true;

      HttpContext.Current.Response.Clear();
      HttpContext.Current.Response.ClearHeaders();
      HttpContext.Current.Response.ClearContent();

      HttpContext.Current.Response.ContentType = "application/vnd.ms-excel";
      HttpContext.Current.Response.AddHeader("Content-Disposition", string.Format("attachment; filename={0}.xls", DateTime.Now.ToString("yyyy-MM-dd-HH-mm")));

      HttpContext.Current.Response.Charset = "GB2312";
      HttpContext.Current.Response.ContentEncoding = Encoding.GetEncoding("GB2312");

      HttpContext.Current.Response.BinaryWrite(bytes);
      HttpContext.Current.Response.Flush();
      HttpContext.Current.Response.Close();
    }
Nach dem Login kopieren

Die zweite Methode bietet eine gute Leistung und ist nicht kompliziert zu bedienen. Sie können den Pfad zum Speichern der Datei beim Exportieren festlegen und sie auch unter speichern einen Stream und geben Sie ihn an den Browser herunter.

Dritte Option: Microsoft.Jet.OLEDB

Diese Art der Bedienung von Excel ähnelt der Bedienung einer Datenbank. Stellen wir zunächst die Verbindung Zeichenfolge vor:


// Excel 2003 版本连接字符串
string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:/xxx.xls;Extended Properties=&#39;Excel 8.0;HDR=Yes;IMEX=2;&#39;";
// Excel 2007 以上版本连接字符串
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/xxx.xlsx;Extended Properties=&#39;Excel 12.0;HDR=Yes;IMEX=2;&#39;";
Nach dem Login kopieren

Anbieter: Treiber Programmname

Datenquelle: Pfad zur Excel-Datei angeben

Erweiterte Eigenschaften: Excel 8.0 ist für Excel 2000 und höher; Excel 12.0 ist für Excel 2007 und höher.

HDR: Ja bedeutet, dass die erste Zeile Spaltennamen enthält und die erste Zeile bei der Berechnung der Anzahl der Zeilen nicht berücksichtigt wird. NEIN ist das komplette Gegenteil.

IMEX: 0 Schreibmodus 1 Lese- und Schreibmodus; Wenn der Fehler „Das Design von Tabelle Blatt1 kann nicht geändert werden. Es handelt sich um eine schreibgeschützte Datenbank“ lautet, entfernen Sie diesen und das Problem wird gelöst.

Das obige ist der detaillierte Inhalt vonEinführung in verschiedene Exportmethoden in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage