/// <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 }
//设置一个单元格的属性 字体, 大小,颜色 ,对齐方式 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; }
/// <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; } }
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; }
/// <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 = "宋体"; //设置字体 }
/// <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 = "宋体"; //设置字体 }
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()); }
/// <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; }
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(); }
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; }
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; }
/// <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 { } }
/// <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); }
/// <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(); //自动调整列宽 }
/// <summary> /// 清除填充区域内的内容 /// </summary> /// <param name="xlsSheet"></param> private void ClearContentsXlsCell(Excel.Worksheet xlsSheet, string statIndex) { xlsSheet.get_Range(statIndex).ClearContents(); }
/// <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 = "宋体"; //设置字体 }
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); }
//合并单元格 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); }
/// <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 } }
/// <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); }
/// <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); } }
/// <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(); }