zoukankan      html  css  js  c++  java
  • 将DataSet导入到Excel的多个Sheet中

    参考MSDN文章:

    如何:使用 COM Interop 创建 Excel 电子表格(C# 编程指南)

    如何: 使用 Visual C#.net Excel 的句柄的事件

    代码:

      private bool WriteToExcel(string filePath, DataSet ds)
            {
                Excel.Application oXL;
                Excel._Workbook oWB;
                Excel._Worksheet oSheet;
                Excel.Range oRng;
    
                object oMissing = System.Reflection.Missing.Value;
                //Start Excel and get Application object.
                oXL = new Excel.Application();
                oXL.Visible = false;
    
                try
                {
    
                    //Get a new workbook.
                    oWB = (Excel._Workbook)(oXL.Workbooks.Open(filePath, oMissing, oMissing, oMissing, oMissing,
                        oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing, oMissing));
    
    
                    oXL.DisplayAlerts = false;
    
                    for (int i = 0; i < ds.Tables.Count; i++)
                    {
                        oSheet = (Excel.Worksheet)oWB.Worksheets.Add(oMissing, oMissing, 1, oMissing);
                        oSheet.Name = ds[i].TableName.Trim();
    
                        int rowIndex = 1;
                        int colIndex = 0;
    
                        for (int j = 0; j < ds.Tables[i].Columns.Count; j++)
                        {
                            //Add table headers going cell by cell.
                            oSheet.Cells[1, j + 1] = ds.Tables[i].Columns[j].ColumnName.Trim();
                            colIndex++;
    
                        }
                        string maxHeaderCell = NumberToChar(colIndex) + "1";
                        //Format A1:D1 as bold, vertical alignment = center.
                        oSheet.get_Range("A1", maxHeaderCell).Font.Bold = true;
                        oSheet.get_Range("A1", maxHeaderCell).VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;
                        // Create an array to multiple values at once.
                        string[,] saNames = new string[ds.Tables[i].Rows.Count, ds.Tables[i].Columns.Count];
    
                        for (int n = 0; n < ds.Tables[i].Rows.Count; n++)
                        {
                            for (int m = 0; m < ds.Tables[i].Columns.Count; m++)
                            {
                                saNames[n, m] = ds.Tables[i].Rows[n][ds.Tables[i].Columns[m].ColumnName.Trim()].ToString();
                            }
                            rowIndex++;
                        }
    
                        oSheet.get_Range("A2", NumberToChar(colIndex) + rowIndex.ToString()).Value2 = saNames;
                        oRng = oSheet.get_Range("A1", maxHeaderCell);
                        oRng.EntireColumn.AutoFit();
    
                    }
    
                    // 保存并关闭这个工作簿
                    oWB.Close(Excel.XlSaveAction.xlSaveChanges, oMissing, oMissing);
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(oWB);
    
                    //Make sure Excel is visible and give the user control
                    //of Microsoft Excel's lifetime.
                    //oXL.Visible = true;
                    //oXL.UserControl = true;
    
                    return true;
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return false;
    
                }
                finally
                {
                    oXL.Quit();             //釋放Excel資源 
                    System.Runtime.InteropServices.Marshal.ReleaseComObject(oXL);
                    oWB = null;
                    oSheet = null;
                    oRng = null;
                    oXL = null;
                    GC.Collect();
                }
            }
            private string NumberToChar(int number)
            {
                if (1 <= number && 26 >= number)
                {
                    int num = number + 64;
                    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                    byte[] btNumber = new byte[] { (byte)num };
                    return asciiEncoding.GetString(btNumber);
                }
                else if (number > 26)
                {
                    int NewNum = number % 26;
                    int count = number / 26;
                    string ss = NumberToChar(count);
                    int num = NewNum + 64;
                    System.Text.ASCIIEncoding asciiEncoding = new System.Text.ASCIIEncoding();
                    byte[] btNumber = new byte[] { (byte)num };
                    return ss + asciiEncoding.GetString(btNumber);
                }
    
                return "数字不在转换范围内";
            }
    
  • 相关阅读:
    android开发 PopupWindow 设置充满屏幕
    android 设置半透明
    web farm 讨论引出
    xamarin studio And linq 查询方式分析
    MONO 使用重要提示
    一个MVC的在线编译工具
    MONO Jexus部署最佳体验
    Origami
    产品原型设计工具 Balsamiq Mockups(转)
    VSPM虚拟串口使用
  • 原文地址:https://www.cnblogs.com/luoht/p/1890488.html
Copyright © 2011-2022 走看看