Пример #1
0
        /// <summary>
        /// J列到V列 加虚线,A到V列 加实线
        /// <param name="xlsSheet">Excel表</param>
        /// <param name="startRowIndex">启始行</param>
        /// <param name="rowIndex">行数</param>
        /// <param name="A">A列</param>
        /// <param name="J">J列</param>
        /// <param name="V">V列</param>
        private void ResetXlsCellStatus(Excel.Worksheet xlsSheet, int startRowIndex, int rowIndex, string A, string J, string V)
        {
            int m = startRowIndex + rowIndex + 1;

            xlsSheet.get_Range(J + startRowIndex, V + m).Borders.get_Item(Excel.XlBordersIndex.xlInsideHorizontal).LineStyle = Excel.XlLineStyle.xlDashDot; //加虚线
            xlsSheet.get_Range(A + m, V + m).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle = Excel.XlLineStyle.xlContinuous;                   //加实线  抵部不好加  顶部加1
        }
Пример #2
0
 //设置一个单元格的属性   字体,   大小,颜色   ,对齐方式
 public void SetCellProperty(Excel.Worksheet ws, int Startx, int Starty, int Endx, int Endy, int size, string name, Excel.Constants color, Excel.Constants HorizontalAlignment)
 {
     name  = "宋体";
     size  = 12;
     color = Excel.Constants.xlAutomatic;
     HorizontalAlignment = Excel.Constants.xlRight;
     ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Name           = name;
     ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Size           = size;
     ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).Font.Color          = color;
     ws.get_Range(ws.Cells[Startx, Starty], ws.Cells[Endx, Endy]).HorizontalAlignment = HorizontalAlignment;
 }
Пример #3
0
 /// <summary>
 /// 从J列开始 画13列 垂直线
 /// </summary>
 /// <param name="xlsSheet"></param>
 /// <param name="startRowIndex"></param>
 /// <param name="stopRowIndex"></param>
 private static void xlEdgeLeftLine(Excel.Worksheet xlsSheet, int startRowIndex, int stopRowIndex, int nunmber, char startNunmber)
 {
     for (int i = 0; i < nunmber; i++)
     {
         string ColName = Convert.ToChar(startNunmber + i).ToString();
         xlsSheet.get_Range(ColName + startRowIndex, ColName + stopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle = Excel.XlLineStyle.xlContinuous;
     }
 }
Пример #4
0
 private void setCPDEmethod(Excel.Worksheet xlsSheet, int startMergeRowIndex, int endMergeRowIndex)
 {
     xlsSheet.get_Range("H" + startMergeRowIndex, "I" + endMergeRowIndex).Borders.LineStyle = Excel.XlLineStyle.xlLineStyleNone;
     xlsSheet.get_Range("H" + startMergeRowIndex).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight; //水平对齐靠左
     xlsSheet.get_Range("I" + startMergeRowIndex).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;  //水平对齐靠左
     xlsSheet.get_Range("H" + startMergeRowIndex, "I" + endMergeRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle   = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range("H" + startMergeRowIndex, "I" + endMergeRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range("H" + startMergeRowIndex, "I" + endMergeRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range("A" + startMergeRowIndex, "H" + endMergeRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
 }
Пример #5
0
 /// <summary>
 /// BC列合并时处理数据
 /// </summary>
 /// <param name="xlsSheet"></param>
 /// <param name="startMergeRowIndex"></param>
 /// <param name="ValueUp"></param>
 /// <param name="ValueDown"></param>
 /// <param name="standardValue"></param>
 private void setBCValueToXlsCell(Excel.Worksheet xlsSheet, int startMergeRowIndex, int endMergeRowIndex, string standardValue)
 {
     xlsSheet.get_Range("B" + startMergeRowIndex, "C" + endMergeRowIndex).Merge();                     //合并单元格
     xlsSheet.get_Range("B" + startMergeRowIndex).Value = standardValue;
     xlsSheet.get_Range("B" + startMergeRowIndex).HorizontalAlignment = Excel.XlHAlign.xlHAlignRight;  //水平对齐靠左
     xlsSheet.get_Range("B" + startMergeRowIndex).HorizontalAlignment = Excel.XlVAlign.xlVAlignCenter; //垂直对对齐 居中
     xlsSheet.get_Range("B" + startMergeRowIndex).NumberFormatLocal   = "@";                           //设置为文本
     xlsSheet.get_Range("B" + startMergeRowIndex).Font.Size           = "12";                          //设置字体大小
     xlsSheet.get_Range("B" + startMergeRowIndex).Font.Name           = "宋体";                          //设置字体
 }
Пример #6
0
        /// <summary>
        /// B列 插入标准值
        /// </summary>
        /// <param name="xlsSheet"></param>
        /// <param name="startRowIndex">起始行</param>
        /// <param name="standardValue"></param>
        /// <param name="column">列数</param>
        private void InsertStandardValue(Excel.Worksheet xlsSheet, int startRowIndex, string standardValue, string column)
        {
            int StopRowIndex = startRowIndex + 1;

            xlsSheet.get_Range(column + startRowIndex, "B" + StopRowIndex).Merge();                               //合并单元格
            xlsSheet.get_Range(column + startRowIndex, "B" + StopRowIndex).Value = standardValue;
            xlsSheet.get_Range(column + startRowIndex).HorizontalAlignment       = Excel.XlHAlign.xlHAlignRight;  //水平对齐靠左
            xlsSheet.get_Range(column + startRowIndex).VerticalAlignment         = Excel.XlVAlign.xlVAlignCenter; //垂直对对齐 居中
            xlsSheet.get_Range(column + startRowIndex).NumberFormatLocal         = "@";                           //设置为文本
            xlsSheet.get_Range(column + startRowIndex).Font.Size = "12";                                          //设置字体大小
            xlsSheet.get_Range(column + startRowIndex).Font.Name = "宋体";                                          //设置字体
        }
Пример #7
0
 static string item(Excel.Worksheet ws, string column, int row)
 {
     Excel.Range c;
     try {
         c = ws.get_Range(column, missing).get_Range("A" + row, missing);
     } catch (System.Exception e) {
         System.Console.WriteLine("error: {0}.{1}[{2}] --- {3}", ws.Name, column, row, e);
         throw e;
     }
     if (c.Value2 == null)
     {
         return("");
     }
     return(c.Value2.ToString());
 }
Пример #8
0
        /// <summary>
        /// BC列不合并时处理数据 ,并处理一合并时清除的一些线
        /// </summary>
        /// <param name="xlsSheet"></param>
        /// <param name="MergeRowIndex">合并的行数</param>
        /// <param name="valueUp">值上限</param>
        /// <param name="valueDown">值下限</param>
        /// <param name="standardValue">规格值</param>
        private void SetBCValueToXlsCell(Excel.Worksheet xlsSheet, int startRowIndex, string valueUp, string valueDown, string standardValue)
        {
            InsertStandardValue(xlsSheet, startRowIndex, standardValue, "B");
            InserUpDownValue(xlsSheet, startRowIndex, valueUp, valueDown, "C");
            int StopRowIndex = startRowIndex + 1;

            xlsSheet.get_Range("B" + startRowIndex, "C" + StopRowIndex).Borders.LineStyle = Excel.XlLineStyle.xlLineStyleNone;
            xlsSheet.get_Range("B" + startRowIndex, "C" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
            xlsSheet.get_Range("B" + startRowIndex, "C" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
            xlsSheet.get_Range("A" + startRowIndex, "A" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
            xlsSheet.get_Range("A" + startRowIndex, "A" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
            xlsSheet.get_Range("F" + startRowIndex, "H" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
            xlsSheet.get_Range("F" + startRowIndex, "H" + StopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
        }
Пример #9
0
    public static void Main()
    {
        Excel.Application ex = new Excel.Application();
        ex.Visible = true;
        Excel.Workbook wb = ex.Workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);

        Excel.Range rg = ex.ActiveCell;

        rg.set_Item(1, 1, "Competência");
        rg.set_Item(1, 2, "Nota");
        rg.set_Item(2, 1, "C++");
        rg.set_Item(2, 2, "5");
        rg.set_Item(3, 1, "UML");
        rg.set_Item(3, 2, "6");
        rg.set_Item(4, 1, "OOP");
        rg.set_Item(4, 2, "5");
        rg.set_Item(5, 1, "DB");
        rg.set_Item(5, 2, "9");
        rg.set_Item(6, 1, ".NET");
        rg.set_Item(6, 2, "4");
        rg.set_Item(7, 1, "XML");
        rg.set_Item(7, 2, "4");

        rg.AutoFormat(Excel.XlRangeAutoFormat.xlRangeAutoFormatClassic3, true, true, true, true, true, true);

        Excel.Chart ch = (Excel.Chart)ex.Charts.Add(Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        ch.ChartType = Excel.XlChartType.xlRadarFilled;

        Excel.Worksheet ws = (Excel.Worksheet)ex.Worksheets["Plan1"];

        Excel.Range lrg = ws.get_Range("A1", "B7");

        ch.SetSourceData(lrg, Excel.XlRowCol.xlColumns);
        ch.Location(Excel.XlChartLocation.xlLocationAsObject, "Plan1");

        ex.ActiveChart.HasLegend       = false;
        ex.ActiveChart.HasTitle        = true;
        ex.ActiveChart.ChartTitle.Text = "Gráfico de Competência";

        Console.Write("Pressionar ENTER para sair do EXCEL"); Console.ReadLine();

        ex.Quit();
    }
Пример #10
0
    public static void CreateExcelFileForDataTable(System.Data.DataTable table, string strFullFilePath, string title)
    {
        //文件存在时先删除文件后再进行下一步操作
        FileInfo file = new FileInfo(strFullFilePath);

        if (file.Exists)
        {
            file.Delete();
        }
        int rowIndex = 3; //开始写入数据的单元格行
        int colIndex = 0; //开始写入数据的单元格列

        System.Reflection.Missing miss   = System.Reflection.Missing.Value;
        Excel.ApplicationClass    mExcel = new Excel.ApplicationClass();
        mExcel.Visible = false;
        Excel.Workbooks mBooks = (Excel.Workbooks)mExcel.Workbooks;
        Excel.Workbook  mBook  = (Excel.Workbook)(mBooks.Add(miss));
        Excel.Worksheet mSheet = (Excel.Worksheet)mBook.ActiveSheet;
        Excel.Range     er     = mSheet.get_Range((object)"A1", System.Reflection.Missing.Value); //向Excel文件中写入标题文本
        er.Value2 = title;
        try
        {
            foreach (DataColumn col in table.Columns) //将所得到的表的列名,赋值给单元格
            {
                colIndex++;
                mSheet.Cells[3, colIndex] = col.ColumnName;
            }
            foreach (DataRow row in table.Rows) //同样方法处理数据
            {
                rowIndex++;
                colIndex = 0;
                foreach (DataColumn col in table.Columns)
                {
                    colIndex++;
                    if (colIndex == 2)
                    {
                        mSheet.Cells[rowIndex, colIndex] = "'" + row[col.ColumnName].ToString();//第二行数据为银行帐号信息转换为字符防止首位0丢失
                    }
                    else
                    {
                        mSheet.Cells[rowIndex, colIndex] = row[col.ColumnName].ToString();
                    }
                }
            }
            //保存工作已写入数据的工作表
            mBook.SaveAs(strFullFilePath, miss, miss, miss, miss, miss, Excel.XlSaveAsAccessMode.xlNoChange, miss, miss, miss, miss, miss);
            // return true;
        }
        catch (Exception ee)
        {
            throw new Exception(ee.Message);
        }
        finally //finally中的代码主要用来释放内存和中止进程()
        {
            mBook.Close(false, miss, miss);
            mBooks.Close();
            mExcel.Quit();
            System.Runtime.InteropServices.Marshal.ReleaseComObject(er);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mSheet);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mBook);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mBooks);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(mExcel);
            GC.Collect();
        }
        //return false;
    }
Пример #11
0
        private void FillCellsWithData(System.Data.DataTable dt, int pos, int row)
        {
            Product p          = new Product();
            int     counter    = row;
            int     itemsTotal = dt.Rows.Count;
            string  Quant      = "B" + pos.ToString();
            string  ID         = "A" + pos.ToString();
            string  Name       = "C" + pos.ToString();
            string  Name2      = "D" + pos.ToString();
            string  Price      = "E" + pos.ToString();
            string  Discount   = "F" + pos.ToString();
            string  Total      = "G" + pos.ToString();

            Excel.Range QuantCell = (Excel.Range)excelWorksheet.get_Range(Quant, Quant);

            QuantCell.Value2 = dt.Rows[counter]["Quantity"].ToString();

            //Excel.Range IDCell = (Excel.Range)excelWorksheet.get_Range(ID, ID);
            //int item = counter + 1;
            //IDCell.Value2 = item.ToString();


            Excel.Range PriceCell = (Excel.Range)excelWorksheet.get_Range(Price, Price);
            PriceCell.Value2 = dt.Rows[counter]["Price"].ToString();

            if (m_iInvoiceType == (int)InvoiceType.Sale)
            {
                Excel.Range DiscountCell = (Excel.Range)excelWorksheet.get_Range(Discount, Discount);
                DiscountCell.Value2 = dt.Rows[counter]["Discount"].ToString();
                m_TotalDiscount    += decimal.Parse(dt.Rows[counter]["Discount"].ToString());

                Excel.Range TotalCell = (Excel.Range)excelWorksheet.get_Range(Total, Total);
                TotalCell.Value2 = dt.Rows[counter]["Grand Total"].ToString();
                //m_TotalDue += decimal.Parse(dt.Rows[counter]["Grand Total"].ToString());
            }
            Excel.Range NameCell = (Excel.Range)excelWorksheet.get_Range(Name, Name2);
            //p = p.GetProduct(Int32.Parse(dt.Rows[counter]["ID"].ToString()));
            if (m_iInvoiceType == (int)InvoiceType.Sale)
            {
                NameCell.Value2 = dt.Rows[counter]["Name"].ToString();

                if (NameCell.Value2.ToString().Contains("<< "))
                {
                    QuantCell.Value2 = "";
                    PriceCell.Value2 = "";
                }
            }
            else
            {
                NameCell.Value2 = dt.Rows[counter]["Product"].ToString();
            }

            p = null;
        }
Пример #12
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="filePath"></param>
        /// <returns></returns>
        public static bool saveDtToExcel(System.Data.DataTable dt, String filePath)
        {
            ApplicationClass app = new ApplicationClass();

            app.Visible = false;
            Workbook  wBook  = app.Workbooks.Add(true);
            Worksheet wSheet = (Worksheet)wBook.Worksheets[1];

            if (dt == null)
            {
                MessageBox.Show("数据源为空,无法导出。", "提示:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return(false);
            }
            //修改wSheet的名称。
            if (!String.IsNullOrEmpty(dt.TableName))
            {
                wSheet.Name = dt.TableName;
            }
            int rowCount = dt.Rows.Count;
            int colCount = dt.Columns.Count;

            //写标题
            try
            {
                //每行格式设置,注意标题占一行。
                Range range = wSheet.get_Range(wSheet.Cells[1, 1], wSheet.Cells[rowCount + 1, colCount + 1]);
                //设置单元格为文本。
                range.NumberFormatLocal = "@";
                //水平对齐方式
                range.HorizontalAlignment = XlHAlign.xlHAlignCenter;
                for (int j = 0; j < colCount; j++)
                {
                    wSheet.Cells[1, j + 1] = dt.Columns[j].ColumnName.ToString();
                }
                if (rowCount > 0)
                {
                    //逐行写数据。
                    for (int i = 0; i < rowCount; i++)
                    {
                        for (int j = 0; j < colCount; j++)
                        {
                            String str = dt.Rows[i][j].ToString();
                            wSheet.Cells[i + 2, j + 1] = str;
                        }
                    }
                }
                //自动调整列宽
                range.EntireColumn.AutoFit();
                //设置禁止弹出保存和覆盖的询问提示框
                app.DisplayAlerts          = false;
                app.AlertBeforeOverwriting = false;
                //保存excel文档并关闭
                wBook.SaveAs(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
                wBook.Close(true, filePath, Type.Missing);
                //退出Excel程序
                app.Quit();
                //释放资源
                System.Runtime.InteropServices.Marshal.ReleaseComObject(range);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(wSheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(wBook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(app);
                //调用GC的垃圾收集方法
                GC.Collect();
                GC.WaitForPendingFinalizers();
                return(true);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString(), "提示消息:", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return(false);
            }
            finally
            {
            }
        }
Пример #13
0
        /// <summary>
        /// 读取一个连续区域的Cell的值(矩形区域,包含一行或一列,或多行,多列),返回一个一维字符串数组。
        /// </summary>
        /// <param name="StartCell">StartCell是要写入区域的左上角单元格</param>
        /// <param name="EndCell">EndCell是要写入区域的右下角单元格</param>
        /// <returns>值的集合</returns>
        public string[] getCellsValue(string StartCell, string EndCell)
        {
            string[] sValue = null;
            xlsRg  = (Excel.Range)xlsWs.get_Range(StartCell, EndCell);
            sValue = new string[xlsRg.Count];
            int rowStartIndex    = ((Excel.Range)xlsWs.get_Range(StartCell, StartCell)).Row;    //起始行号
            int columnStartIndex = ((Excel.Range)xlsWs.get_Range(StartCell, StartCell)).Column; //起始列号
            int rowNum           = xlsRg.Rows.Count;                                            //行数目
            int columnNum        = xlsRg.Columns.Count;                                         //列数目
            int index            = 0;

            for (int i = rowStartIndex; i < rowStartIndex + rowNum; i++)
            {
                for (int j = columnStartIndex; j < columnNum + columnStartIndex; j++)
                {
                    //读到空值null和读到空串""分别处理
                    sValue[index] = ((Excel.Range)xlsWs.Cells[i, j]).Text.ToString();
                    index++;
                }
            }
            return(sValue);
        }
Пример #14
0
 /// <summary>
 /// 填充标准值
 /// </summary>
 /// <param name="xlsSheet"></param>
 /// <param name="startRowIndex"></param>
 /// <param name="stopRowIndex"></param>
 /// <param name="colName"></param>
 /// <param name="value"></param>
 private void setValueToXlsCell(Excel.Worksheet xlsSheet, int startRowIndex, int stopRowIndex, string colName, string value)
 {
     if (startRowIndex == stopRowIndex)
     {
         xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Value = value;
     }
     else
     {
         xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Merge();
         xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Value = value;
     }
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).WrapText            = true;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Borders.Weight      = Excel.XlBorderWeight.xlThin;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).HorizontalAlignment = -4108;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Borders.LineStyle   = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeLeft).LineStyle   = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeTop).LineStyle    = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).Borders.get_Item(Excel.XlBordersIndex.xlEdgeBottom).LineStyle = Excel.XlLineStyle.xlContinuous;
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).EntireColumn.ShrinkToFit = true; //自动缩小字体填充
     xlsSheet.get_Range(colName + startRowIndex, colName + stopRowIndex).EntireColumn.AutoFit();          //自动调整列宽
 }
Пример #15
0
 /// <summary>
 /// 清除填充区域内的内容
 /// </summary>
 /// <param name="xlsSheet"></param>
 private void ClearContentsXlsCell(Excel.Worksheet xlsSheet, string statIndex)
 {
     xlsSheet.get_Range(statIndex).ClearContents();
 }
Пример #16
0
        /// <summary>
        /// 插入上限,下限的值
        /// </summary>
        /// <param name="xlsSheet"></param>
        /// <param name="startRowIndex">起始行</param>
        /// <param name="valueUp">上限值</param>
        /// <param name="valueDown">下限值</param>
        /// <param name="column">列数</param>
        private void InserUpDownValue(Excel.Worksheet xlsSheet, int startRowIndex, string valueUp, string valueDown, string column)
        {
            int StopRowIndex = startRowIndex + 1;

            xlsSheet.get_Range(column + startRowIndex).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft;   //水平对齐靠右
            xlsSheet.get_Range(column + startRowIndex).VerticalAlignment   = Excel.XlVAlign.xlVAlignBottom; //垂直对对齐 向下
            xlsSheet.get_Range(column + startRowIndex).NumberFormatLocal   = "@";                           //设置为文本
            xlsSheet.get_Range(column + startRowIndex).Value = valueUp;

            xlsSheet.get_Range(column + startRowIndex).Font.Size = "8";  //设置字体大小
            xlsSheet.get_Range(column + startRowIndex).Font.Name = "宋体"; //设置字体


            xlsSheet.get_Range(column + StopRowIndex).NumberFormatLocal   = "@";                         //设置为文本
            xlsSheet.get_Range(column + StopRowIndex).Value               = valueDown;
            xlsSheet.get_Range(column + StopRowIndex).HorizontalAlignment = Excel.XlHAlign.xlHAlignLeft; //水平对齐靠右
            xlsSheet.get_Range(column + StopRowIndex).VerticalAlignment   = Excel.XlVAlign.xlVAlignTop;  //垂直对对齐 向上
            xlsSheet.get_Range(column + StopRowIndex).Font.Size           = "8";                         //设置字体大小
            xlsSheet.get_Range(column + StopRowIndex).Font.Name           = "宋体";                        //设置字体
        }
Пример #17
0
        private int DataTable2Excel(System.Data.DataTable dt, int totalCount, int currentCount, Dictionary <string, string> dicColumnNameMapping,
                                    object omissing, Excel.Workbook xlworkbook)
        {
            try
            {
                var tmpDataTable = dt.Copy();

                #region 表头
                if (dicColumnNameMapping != null)
                {
                    ResolveDatatableColumns(tmpDataTable, dicColumnNameMapping);
                }

                //var dr = tmpDataTable.NewRow();
                //for (int i = 0; i < tmpDataTable.Columns.Count; i++)
                //{
                //    dr[i] = tmpDataTable.Columns[i].ColumnName;
                //}
                //tmpDataTable.Rows.InsertAt(dr, 0);
                #endregion

                #region 快速导出数据

                int rowNum      = tmpDataTable.Rows.Count;
                int columnNum   = tmpDataTable.Columns.Count;
                int rowIndex    = 1;
                int columnIndex = 0;

                Excel.Worksheet xlworksheet = (Excel.Worksheet)xlworkbook.Worksheets.Add(omissing, omissing, 1, omissing);
                xlworksheet.Name = tmpDataTable.TableName == null ? xlworksheet.Name : ResolveSheetName(tmpDataTable.TableName);
                int         colnum = tmpDataTable.Columns.Count;
                Excel.Range r      = xlworksheet.get_Range("A1", NumToExeclRowStr(colnum) + "1");

                object[] objHeader = new object[colnum];

                columnIndex = 0;//表头
                for (int j = 0; j < columnNum; j++)
                {
                    objHeader[columnIndex] = tmpDataTable.Columns[j].ColumnName;
                    columnIndex++;
                }
                r.Value2 = objHeader;

                //将DataTable中的数据导入Excel中
                for (int f = 0; f < rowNum; f++)
                {
                    rowIndex++;
                    columnIndex = 0;
                    for (int j = 0; j < columnNum; j++)
                    {
                        string danyinhao = "";//"'";
                        objHeader[columnIndex] = danyinhao + tmpDataTable.Rows[f][j].ToString();
                        columnIndex++;
                    }
                    r        = xlworksheet.get_Range("A" + (f + 2), NumToExeclRowStr(colnum) + (f + 2));
                    r.Value2 = objHeader;
                    currentCount++;
                    AddProcess(currentCount, totalCount);
                }
                //r.EntireColumn.WrapText = true;
                r.EntireColumn.AutoFit();
                #endregion 快速导出数据
            }
            catch (Exception ex)
            {
                AddError(ex.Message);
            }
            return(currentCount);
        }
Пример #18
0
 //合并单元格
 public void UniteCells(Excel.Worksheet ws, int x1, int y1, int x2, int y2)
 {
     ws.get_Range(ws.Cells[x1, y1], ws.Cells[x2, y2]).Merge(Type.Missing);
 }
Пример #19
0
        /// <summary>
        /// 把DataTable中的数据导出到Excel
        /// </summary>
        /// <param name="dt"></param>
        public static void DataTableToExcel(System.Data.DataTable srcDt, string savename)
        {
            System.Data.DataTable dt = new System.Data.DataTable();
            dt = srcDt;

            if (dt == null)
            {
                return;
            }

            string saveFileName = "";
            bool   fileSaved    = false;

            /*SaveFileDialog saveDialog = new SaveFileDialog();
             * saveDialog.DefaultExt = "xlsx";
             * saveDialog.Filter = "Excel文件|*.xlsx";
             * saveDialog.FileName = "导出文件";
             * saveDialog.ShowDialog();
             * saveFileName = saveDialog.FileName;
             * if (saveFileName.IndexOf(":") < 0) return; //被点了取消 */
            Excel.Application xlApp = new Excel.Application();
            if (xlApp == null)
            {
                MessageBox.Show("无法创建Excel对象,可能您的机子未安装Excel");
                return;
            }
            Excel.Workbooks workbooks = xlApp.Workbooks;
            Excel.Workbook  workbook  = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);


            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 8]).Font.ColorIndex = 9;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 8]).ColumnWidth     = 40;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[11, 1]).RowHeight      = 50;

            //worksheet.get_Range(worksheet.Cells[3, 1], worksheet.Cells[3, 6]).Interior.ColorIndex = 6;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[11, 8]).Borders.LineStyle = Excel.XlLineStyle.xlContinuous;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[11, 8]).WrapText          = true;
            worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[11, 8]).BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
            //worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, 1]).BorderAround(XlLineStyle.xlContinuous, XlBorderWeight.xlThick, XlColorIndex.xlColorIndexAutomatic, System.Drawing.Color.Black.ToArgb());
            for (int i = 2; i < 12; i++)
            {
                if (dt.Rows[i - 2][3].ToString() == "E")
                {
                    worksheet.get_Range(worksheet.Cells[i, 1], worksheet.Cells[i, 8]).Interior.ColorIndex = 3;
                }
                if (dt.Rows[i - 2][3].ToString() == "W")
                {
                    worksheet.get_Range(worksheet.Cells[i, 1], worksheet.Cells[i, 8]).Interior.ColorIndex = 6;
                }
            }
            //写入字段

            worksheet.Cells[1, 1] = "参数名称";
            worksheet.Cells[1, 2] = "参数值";
            worksheet.Cells[1, 3] = "推荐值";
            worksheet.Cells[1, 4] = "报警值";
            worksheet.Cells[1, 5] = "详情";
            worksheet.Cells[1, 6] = "参数类型";
            worksheet.Cells[1, 7] = "重要级别";
            worksheet.Cells[1, 8] = "历史变化";


            //写入数值

            for (int r = 0; r < dt.Rows.Count; r++)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i];
                }
                System.Windows.Forms.Application.DoEvents();
            }
            //worksheet.Columns.EntireColumn.AutoFit();//列宽自适应。

            /*string md5 = "";
             * for (int r = 0; r < 5; r++)
             * {
             *  for (int i = 0; i < 8; i++)
             *  {
             *      md5 += dt.Rows[r][i].ToString();
             *      worksheet.Cells[2, 9] = md5;
             *  }
             *
             * }
             */

            //worksheet.Cells.Width = 39;
            //if (saveFileName != "")
            //{
            try
            {
                workbook.Saved = true;
                saveFileName   = savename;
                workbook.SaveCopyAs(saveFileName);
                fileSaved = true;
                MessageBox.Show("导出完成!");
            }
            catch (Exception ex)
            {
                fileSaved = false;
                MessageBox.Show("导出文件时出错,文件可能正被打开!\n" + ex.Message);
            }
            //}
            //else
            //{
            // fileSaved = false;
            //}

            xlApp.Quit();
            GC.Collect();//强行销毁
            if (fileSaved && System.IO.File.Exists(saveFileName))
            {
                System.Diagnostics.Process.Start(saveFileName); //打开EXCEL
            }
        }
Пример #20
0
        /// <summary>
        ///方法,导出DataGridView中的数据到Excel文件
        /// </summary>
        /// <remarks>
        /// </remarks>
        /// <param name= "dgv"> DataGridView </param>
        public static void DataGridViewToExcel(MultiColHeaderDgv dgv)
        {
            #region

            //申明保存对话框
            SaveFileDialog dlg = new SaveFileDialog();
            //默然文件后缀
            dlg.DefaultExt = "xls ";
            //文件后缀列表
            dlg.Filter = "EXCEL文件(*.XLS)|*.xls ";
            //默然路径是系统当前路径
            dlg.InitialDirectory = Directory.GetCurrentDirectory();
            //打开保存对话框
            if (dlg.ShowDialog() == DialogResult.Cancel)
            {
                return;
            }
            //返回文件路径
            string fileNameString = dlg.FileName;
            //验证strFileName是否为空或值无效
            if (fileNameString.Trim() == " ")
            {
                return;
            }
            //定义表格内数据的行数和列数
            int rowscount = dgv.Rows.Count;
            int colscount = dgv.Columns.Count;
            //行数必须大于0
            if (rowscount <= 0)
            {
                MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //列数必须大于0
            if (colscount <= 0)
            {
                MessageBox.Show("没有数据可供保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //行数不可以大于65536
            if (rowscount > 65536)
            {
                MessageBox.Show("数据记录数太多(最多不能超过65536条),不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //列数不可以大于255
            if (colscount > 255)
            {
                MessageBox.Show("数据记录行数太多,不能保存 ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }

            //验证以fileNameString命名的文件是否存在,如果存在删除它
            FileInfo file = new FileInfo(fileNameString);
            if (file.Exists)
            {
                try
                {
                    file.Delete();
                }
                catch (Exception error)
                {
                    MessageBox.Show(error.Message, "删除失败 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                    return;
                }
            }
            #endregion
            Excel.Application objExcel    = new Excel.Application();
            Excel.Workbook    objWorkbook = null;
            Excel.Worksheet   objsheet    = null;

            try
            {
                //申明对象
                objExcel = new Excel.ApplicationClass();

                //objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                objWorkbook = objExcel.Workbooks.Add(Missing.Value);
                //objsheet = (Microsoft.Office.Interop.Excel.Worksheet)objWorkbook.ActiveSheet;
                objsheet = (Excel.Worksheet)objWorkbook.ActiveSheet;


                //设置EXCEL不可见
                objExcel.Visible = false;

                //向Excel中写入表格的表头
                int displayColumnsCount = 1;

                //Excel.Range
                Excel.Range range1  = objExcel.get_Range(objExcel.Cells[1, 1], objExcel.Cells[3, 1]);
                Excel.Range range2  = objExcel.get_Range(objExcel.Cells[1, 2], objExcel.Cells[3, 2]);
                Excel.Range range3  = objExcel.get_Range(objExcel.Cells[1, 3], objExcel.Cells[3, 3]);
                Excel.Range range4  = objExcel.get_Range(objExcel.Cells[1, 4], objExcel.Cells[3, 4]);
                Excel.Range range5  = objExcel.get_Range(objExcel.Cells[1, 5], objExcel.Cells[3, 5]);
                Excel.Range range6  = objExcel.get_Range(objExcel.Cells[1, 6], objExcel.Cells[3, 6]);
                Excel.Range range7  = objExcel.get_Range(objExcel.Cells[1, 7], objExcel.Cells[3, 7]);
                Excel.Range range8  = objExcel.get_Range(objExcel.Cells[2, 8], objExcel.Cells[3, 8]);
                Excel.Range range9  = objExcel.get_Range(objExcel.Cells[1, 8], objExcel.Cells[1, 11]);
                Excel.Range range10 = objExcel.get_Range(objExcel.Cells[2, 9], objExcel.Cells[2, 11]);

                range1.Merge(0);
                range2.Merge(0);
                range3.Merge(0);
                range4.Merge(0);
                range5.Merge(0);
                range6.Merge(0);
                range7.Merge(0);
                range8.Merge(0);
                range9.Merge(0);
                range9.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;     // 文本水平居中方式
                range10.Merge(0);
                range10.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;
                range1.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range2.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range3.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range4.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range5.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range6.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range7.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range8.NumberFormatLocal    = "@";  //设置单元格格式为文本
                range9.NumberFormatLocal    = "@";  //设置单元格格式为文本
                objsheet.Cells[1, 1]        = "财务分类";
                objsheet.Cells[1, 2]        = "项目代码";
                objsheet.Cells[1, 3]        = "项目名称";
                objsheet.Cells[1, 4]        = "项目内涵";
                objsheet.Cells[1, 5]        = "除外内容";
                objsheet.Cells[1, 6]        = "计价单位";
                objsheet.Cells[1, 7]        = "说明";
                objsheet.Cells[2, 8]        = "省定价";
                objsheet.Cells[3, 9]        = "三档";
                objsheet.Cells[3, 10]       = "二档";
                objsheet.Cells[3, 11]       = "一档";
                objsheet.Cells[1, 8]        = "价格(元)";
                objsheet.Cells[2, 9]        = "市定价格";

                range2.ColumnWidth = 12;                                    //设置单元格的宽度
                range3.ColumnWidth = 20;                                    //设置单元格的宽度
                range4.ColumnWidth = 35;                                    //设置单元格的宽度
                range5.ColumnWidth = 25;                                    //设置单元格的宽度
                range7.ColumnWidth = 25;                                    //设置单元格的宽度

                range2.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中方式
                range3.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中方式
                range4.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中方式
                range5.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中方式
                range7.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter; // 文本水平居中方式

                Excel.Range rangGol = objsheet.get_Range("A1", "K" + dgv.RowCount.ToString());
                rangGol.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;     // 文本水平居中方式
                rangGol.WrapText            = true;

                //向Excel中逐行逐列写入表格中的数据
                for (int row = 0; row <= dgv.RowCount - 1; row++)
                {
                    //tempProgressBar.PerformStep();

                    displayColumnsCount = 1;
                    for (int col = 0; col < colscount; col++)
                    {
                        if (dgv.Columns[col].Visible == true)
                        {
                            try
                            {
                                objExcel.Cells[row + 4, displayColumnsCount] = dgv.Rows[row].Cells[col].Value.ToString().Trim();
                                displayColumnsCount++;
                            }
                            catch (Exception)
                            {
                            }
                        }
                    }
                }

                //保存文件
                objWorkbook.SaveAs(fileNameString, Missing.Value, Missing.Value, Missing.Value, Missing.Value,
                                   Missing.Value, Excel.XlSaveAsAccessMode.xlShared, Missing.Value, Missing.Value, Missing.Value,
                                   Missing.Value, Missing.Value);
            }
            catch (Exception error)
            {
                MessageBox.Show(error.Message, "警告 ", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                return;
            }
            finally
            {
                //关闭Excel应用
                if (objWorkbook != null)
                {
                    objWorkbook.Close(Missing.Value, Missing.Value, Missing.Value);
                }
                if (objExcel.Workbooks != null)
                {
                    objExcel.Workbooks.Close();
                }
                if (objExcel != null)
                {
                    objExcel.Quit();
                }

                objsheet    = null;
                objWorkbook = null;
                objExcel    = null;
            }
            MessageBox.Show(fileNameString + "\n\n导出完毕! ", "提示 ", MessageBoxButtons.OK, MessageBoxIcon.Information);
        }
Пример #21
0
        /// <summary>
        /// 将datatable导出到excel
        /// </summary>
        /// <param name="dt"></param>
        /// <param name="saveasfilepath"></param>
        /// <param name="WorkbookName"></param>
        public void ExportExcel(System.Data.DataTable dt, string saveasfilepath, string WorkbookName)
        {
            if (dt == null)
            {
                return;
            }
            string saveFileName = saveasfilepath;  // "d:\\333.xlsx";
            bool   fileSaved    = false;

            Excel.Application xlApp = new Excel.Application();

            if (xlApp == null)
            {
                throw new Exception("无法创建Excel对象,可能您的机子未安装Excel");
            }

            Excel.Workbooks workbooks = xlApp.Workbooks;
            Excel.Workbook  workbook  = workbooks.Add(Excel.XlWBATemplate.xlWBATWorksheet);
            Excel.Worksheet worksheet = (Excel.Worksheet)workbook.Worksheets[1];//取得sheet1
            if (!string.IsNullOrEmpty(WorkbookName))
            {
                Excel.Worksheet ws = (Excel.Worksheet)workbook.Worksheets.get_Item(1);
                ws.Name = WorkbookName;
            }
            Excel.Range range;
            //string oldCaption = DateTime.Today.ToString("yy-MM-dd");
            long  totalCount = dt.Rows.Count;
            long  rowRead    = 0;
            float percent    = 0;

            // worksheet.Cells[1, 1] = DateTime.Today.ToString("yy-MM-dd");
            //写入字段
            for (int i = 0; i < dt.Columns.Count; i++)
            {
                worksheet.Cells[1, i + 1] = dt.Columns[i].ColumnName;
                range = (Excel.Range)worksheet.Cells[1, i + 1];
                range.Interior.ColorIndex = 15;
                range.Font.Bold           = true;
            }
            //写入数值

            for (int r = 0; r < dt.Rows.Count; r++)
            {
                for (int i = 0; i < dt.Columns.Count; i++)
                {
                    worksheet.Cells[r + 2, i + 1] = dt.Rows[r][i];
                }
                rowRead++;
                percent = ((float)(100 * rowRead)) / totalCount;
                //this.lbl_process.Text = "正在导出数据[" + percent.ToString("0.00") + "%]..."; //这里可以自己做一个label用来显示进度.
                System.Windows.Forms.Application.DoEvents();
            }
            //this.lbl_process.Visible = false;

            range = worksheet.get_Range(worksheet.Cells[2, 1], worksheet.Cells[dt.Rows.Count + 2, dt.Columns.Count]);
            range.BorderAround(Excel.XlLineStyle.xlContinuous, Excel.XlBorderWeight.xlThin, Excel.XlColorIndex.xlColorIndexAutomatic, null);

            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].LineStyle  = Excel.XlLineStyle.xlContinuous;
            range.Borders[Excel.XlBordersIndex.xlInsideHorizontal].Weight     = Excel.XlBorderWeight.xlThin;

            if (dt.Columns.Count > 1)
            {
                range.Borders[Excel.XlBordersIndex.xlInsideVertical].ColorIndex = Excel.XlColorIndex.xlColorIndexAutomatic;
                range.Borders[Excel.XlBordersIndex.xlInsideVertical].LineStyle  = Excel.XlLineStyle.xlContinuous;
                range.Borders[Excel.XlBordersIndex.xlInsideVertical].Weight     = Excel.XlBorderWeight.xlThin;
            }

            if (saveFileName != "")
            {
                try
                {
                    //xlApp.Visible = true;
                    //workbook.PrintPreview(false);
                    workbook.Close(true, saveFileName, Type.Missing);
                    workbook = null;
                    //SaveAs方法会截断超过255个字符的字符串
                    //workbook.Saved = true;
                    //workbook.SaveAs(saveFileName, Excel.XlFileFormat.xlExcel7, Type.Missing,
                    //    Type.Missing, Type.Missing, Type.Missing,
                    //    Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing,
                    //    Type.Missing, Type.Missing, Type.Missing);
                    //fileSaved = true;
                }
                catch (Exception ex)
                {
                    xlApp.Quit();
                    GC.Collect();
                    fileSaved = false;
                    throw new Exception("导出文件时出错,文件可能正被打开!\n" + ex.Message);
                }
            }
            else
            {
                fileSaved = false;
            }
            xlApp.Quit();
            xlApp = null;
            GC.Collect();//强行销毁
            if (fileSaved && File.Exists(saveFileName))
            {
                //System.Diagnostics.Process.Start(saveFileName);
            }
        }
Пример #22
0
 /// <summary>
 /// 合并B C 二列
 /// </summary>
 /// <param name="xlsSheet"></param>
 /// <param name="mergeRowIndex">合并二列的行数</param>
 private void MergeXlsCell(Excel.Worksheet xlsSheet, int mergeRowIndex)
 {
     xlsSheet.get_Range("B" + mergeRowIndex, "C" + mergeRowIndex).Merge();
 }