C# 获取文件信息并导出Excel,Xml报表

来源:互联网 发布:手游大话西游仙玉淘宝 编辑:程序博客网 时间:2024/05/16 14:56
using System;using System.Data;using System.Linq;using System.Windows.Forms;using Excel = Microsoft.Office.Interop.Excel;// 添加引用 -> .NET -> Microsoft.Office.Interop.Excel(2003->11.0, 2007->12.0)namespace WinFormTable{    static class ClassSchema    {        #region DataTable.PrintToExcel        public static void PrintToExcel(this System.Data.DataTable table, string caption, params string[] columns)        {            Excel.Application xls = new Excel.Application();            try            {                Excel.Workbook book = xls.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);                Excel.Worksheet sheet = book.ActiveSheet as Excel.Worksheet;                xls.Visible = true; // 显示Excel工作薄。                book.Password = "jinzhexian"; // 设置密码。                sheet.Name = caption; // 设置Excel工作表名。                sheet.get_Range("C4", Type.Missing).EntireColumn.NumberFormat = "#,##0.00";                sheet.get_Range("D4", Type.Missing).EntireColumn.NumberFormat = "yyyy-MM-dd HH:mm:ss";                Excel.Range range = sheet.get_Range("B1", Type.Missing).get_Resize(2, table.Columns.Count);                range.MergeCells = true; // 合并单元格。                range.Font.Size = 16; // 设置字体大小。                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = caption; // 设置标题。                range = range.get_Offset(1, 0).get_Resize(1, table.Columns.Count);                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = columns; // 设置列标题。                foreach (DataRow row in table.Rows)                {                    range = range.get_Offset(1, 0);                    range.Value2 = row.ItemArray;                }                range = range.get_Offset(2, 0);                range.MergeCells = true; // 合并单元格。                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = string.Format("打印日期: {0:yyyy'年'M'月'd'日'}", DateTime.Today);                range.EntireColumn.AutoFit(); // 自动调整列宽。                sheet.get_Range("A4", Type.Missing).Select();                xls.SendKeys("%WFF", true); // 冻结拆分窗格 Microsoft Office 2003(%WF), 2007(%WFF)。            }            catch            {                xls.Quit();            }            finally            {                xls = null;                GC.Collect();            }        }        #endregion        #region DataGridView.PrintToExcel        public static void PrintToExcel(this DataGridView gridView, string caption)        {            Excel.Application xls = new Excel.Application();            try            {                Excel.Workbook book = xls.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);                Excel.Worksheet sheet = book.ActiveSheet as Excel.Worksheet;                xls.Visible = true;                book.Password = "jinzhexian";                sheet.Name = caption; // 工作表名。                Excel.Range range = sheet.get_Range("B1", Type.Missing).get_Resize(2, gridView.ColumnCount);                range.MergeCells = true; // 合并单元格。                range.Font.Size = 16;                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = caption; // 表标题。                range = range.get_Offset(1, 0).get_Resize(1, gridView.ColumnCount);                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = gridView.Columns.Cast<DataGridViewColumn>().Select(sm => sm.HeaderText).ToArray(); // 列标题。                foreach (DataGridViewRow row in gridView.Rows)                {                    range = range.get_Offset(1, 0);                    range.Value2 = row.Cells.Cast<DataGridViewCell>().Select(sm => sm.FormattedValue).ToArray();                }                range = range.get_Offset(2, 0);                range.MergeCells = true; // 合并单元格。                range.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中。                range.Value2 = string.Format("打印日期: {0:yyyy'年'M'月'd'日'}", DateTime.Today);                range.EntireColumn.AutoFit(); // 自动调整列宽。                sheet.get_Range("A4", Type.Missing).Select();                xls.SendKeys("%WFF", true); // 冻结拆分窗格 Microsoft Office 2003(%WF), 2007(%WFF)。            }            catch            {                xls.Quit();            }            finally            {                xls = null;                GC.Collect();            }        }        #endregion    }}using System;using System.Data;using System.Drawing;using System.Globalization;using System.IO;using System.Windows.Forms;// 添加引用 -> .NET -> Microsoft.Office.Interop.Excel(2003->11.0, 2007->12.0)namespace WinFormTable{    public partial class FormTable : Form    {        #region        private DataTable table;        private ChineseLunisolarCalendar lunarCalendar;        #endregion        public FormTable()        {            #region            InitializeComponent();            lunarCalendar = new ChineseLunisolarCalendar(); // 中国阴历。            table = new DataTable("File");            table.Locale = CultureInfo.InvariantCulture; // 固定区域。            DataColumn column = table.Columns.Add("Name", typeof(String));            table.Columns.Add("Length", typeof(Decimal));            table.Columns.Add("CreationTime", typeof(DateTime));            table.Constraints.Add("PK", column, true); // 创建主键。            table.DefaultView.ApplyDefaultSort = true; // 使用默认排序。            GridViewStyle();            #endregion        }        #region OnLoad        protected override void OnLoad(EventArgs e)        {            base.OnLoad(e);            table.BeginLoadData();            folderBrowser.SelectedPath = Environment.GetFolderPath(Environment.SpecialFolder.Recent);            DirectoryInfo dir = new DirectoryInfo(folderBrowser.SelectedPath);            foreach (FileInfo info in dir.GetFiles("*.lnk"))            {                table.Rows.Add(info.Name, info.Length / 1024M, info.CreationTime);            }            table.EndLoadData();            int sw = 28;            foreach (DataGridViewColumn column in gridView.Columns)            {                sw += column.Width;            }            this.Width = sw;            this.Text = dir.Name;        }        #endregion        #region DataGridViewStyle        private void GridViewStyle()        {            DataGridViewTextBoxColumn nameColumn = new DataGridViewTextBoxColumn();            nameColumn.DataPropertyName = "Name";            nameColumn.HeaderText = "名称";            gridView.Columns.Add(nameColumn);            DataGridViewTextBoxColumn lengthColumn = new DataGridViewTextBoxColumn();            lengthColumn.DataPropertyName = "Length";            lengthColumn.HeaderText = "大小";            lengthColumn.DefaultCellStyle.Format = "#,##0.00 KB";            lengthColumn.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;            gridView.Columns.Add(lengthColumn);            DataGridViewTextBoxColumn timeColumn = new DataGridViewTextBoxColumn();            timeColumn.DataPropertyName = "CreationTime";            timeColumn.HeaderText = "创建时间";            timeColumn.DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";            gridView.Columns.Add(timeColumn);            gridView.AutoGenerateColumns = false; // 禁用自动创建列。            gridView.AllowUserToAddRows = false; // 隐藏添加行。            gridView.AllowUserToDeleteRows = false; // 禁用删除行。            gridView.AllowUserToOrderColumns = false; // 禁用列排序。            gridView.AllowUserToResizeRows = false; // 禁用调整行高。            gridView.MultiSelect = false; // 用户仅能选择一个单元格、行或列。            gridView.ReadOnly = true; // 禁用编辑单元格。            gridView.RowHeadersVisible = false; // 隐藏包含行标题的列。            gridView.ShowCellToolTips = true; // 显示工具提示。            gridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;            gridView.BackgroundColor = SystemColors.Window;            gridView.BorderStyle = BorderStyle.Fixed3D;            gridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.BottomCenter;            gridView.SelectionMode = DataGridViewSelectionMode.FullRowSelect; // 通过单击行的标头或是该行所包含的单元格选定整个行。            gridView.SelectionChanged += new EventHandler(gridView_SelectionChanged);            gridView.CellToolTipTextNeeded += new DataGridViewCellToolTipTextNeededEventHandler(gridView_CellToolTipTextNeeded);            gridView.DataSource = table.DefaultView;        }        private void gridView_SelectionChanged(object sender, EventArgs e)        {            CurrencyManager manager = BindingContext[table.DefaultView] as CurrencyManager;            toolLabelCount.Text = string.Format("{0} / {1}", manager.Position + 1, manager.Count);            toolFirstButton.Enabled = toolPreviousButton.Enabled = (manager.Position > 0);            toolLastButton.Enabled = toolNextButton.Enabled = (manager.Position + 1 < manager.Count);        }        private void gridView_CellToolTipTextNeeded(object sender, DataGridViewCellToolTipTextNeededEventArgs e)        {            if (e.RowIndex > -1)                e.ToolTipText = Path.Combine(folderBrowser.SelectedPath, table.DefaultView[e.RowIndex][0] as string); // 设置工具提示文本。        }        #endregion        #region        private void toolStripInfo_ItemClicked(object sender, ToolStripItemClickedEventArgs e)        {            CurrencyManager manager = BindingContext[table.DefaultView] as CurrencyManager;            switch (e.ClickedItem.Name)            {                case "toolLoadButton":                    if (folderBrowser.ShowDialog(this) == DialogResult.OK)                    {                        table.Clear();                        table.BeginLoadData();                        folderBrowser.Description = folderBrowser.SelectedPath;                        DirectoryInfo dir = new DirectoryInfo(folderBrowser.SelectedPath);                        foreach (FileInfo info in dir.GetFiles())                        {                            table.Rows.Add(info.Name, info.Length / 1024M, info.CreationTime);                        }                        table.EndLoadData();                        int sw = 28;                        foreach (DataGridViewColumn column in gridView.Columns)                        {                            sw += column.Width;                        }                        this.Width = sw;                        this.Text = dir.Name;                    }                    break;                case "toolExcelButton":                    table.AcceptChanges();                    table.PrintToExcel(this.Text, "名称", "大小(KB)", "创建时间");                    //gridView.PrintToExcel(this.Text);                    break;                case "toolXmlButton":                    FileInfo fi = new FileInfo(Path.Combine(Application.StartupPath, "File.xml"));                    if (fi.Exists)                        fi.Attributes = FileAttributes.Normal;                    using (StreamWriter writer = fi.CreateText())                    {                        table.AcceptChanges();                        table.WriteXml(writer, XmlWriteMode.IgnoreSchema);                    }                    System.Diagnostics.Process.Start(fi.FullName);                    break;                case "toolFirstButton":                    manager.Position = 0;                    break;                case "toolPreviousButton":                    --manager.Position;                    break;                case "toolNextButton":                    ++manager.Position;                    break;                case "toolLastButton":                    manager.Position = manager.Count - 1;                    break;            }            toolLabelCount.Text = string.Format("{0} / {1}", manager.Position + 1, manager.Count);            toolFirstButton.Enabled = toolPreviousButton.Enabled = (manager.Position > 0);            toolLastButton.Enabled = toolNextButton.Enabled = (manager.Position + 1 < manager.Count);        }        #endregion        #region DateTime        private void timerInfo_Tick(object sender, EventArgs e)        {            Application.CurrentCulture.ClearCachedData();            DateTime solar = DateTime.Now;            int month = lunarCalendar.GetMonth(solar);            int leapMonth = lunarCalendar.GetLeapMonth(lunarCalendar.GetYear(solar));            if (0 < leapMonth && leapMonth <= month)                --month;            statusLabelTime.Text = string.Format("{0:F} [{1} {2:00}]", solar, DateTimeFormatInfo.CurrentInfo.MonthNames[month - 1], lunarCalendar.GetDayOfMonth(solar));        }        #endregion    }}

原创粉丝点击