当前位置:网站首页>基于Infragistics.Document.Excel导出表格的类
基于Infragistics.Document.Excel导出表格的类
2022-07-06 09:33:00 【心蓝168】
以前一直使用Infragistics的Web控件,其中导出Excel部分,有使用其自身的Excel导出的,为方便自已的使用,所以进行了再次的封装。
不知到还有没有同行使和该组件的,希望有用!
更全的源码,请访问下载
https://download.csdn.net/download/hyjchina/80481314
#region 命名空间
using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using Infragistics.Documents.Excel;
#endregion
namespace XL.OFFIC.OfficeClass
{
#region 页面设置
/// <summary>
/// 页面设置(方向)
/// </summary>
public enum PageOrientation
{
/// <summary>
/// 横向
/// </summary>
Landscape,
/// <summary>
/// 纵向
/// </summary>
Portrait
}
/// <summary>
/// 纸张大小
/// </summary>
public enum PaperSize
{
/// <summary>
/// A2
/// </summary>
A2,
/// <summary>
/// A3
/// </summary>
A3,
/// <summary>
/// A4
/// </summary>
A4,
/// <summary>
/// A5
/// </summary>
A5,
/// <summary>
/// A6
/// </summary>
A6,
/// <summary>
/// B4
/// </summary>
B4JIS,
/// <summary>
/// B5
/// </summary>
B5JIS,
/// <summary>
/// JapanesePost
/// </summary>
JapanesePost
}
#endregion
#region 常用常量
static class ExcelDataConst
{
public const int colWidth = 256; //宽度转换比
public const int rowHeight = 20; //高度转换比
public const double pageMargin = 0.4; //边距转换比
}
#endregion
#region 对齐方式
/// <summary>
/// 对齐方式
/// </summary>
public enum ExcelHAlign
{
/// <summary>
/// 左对齐
/// </summary>
Left,
/// <summary>
/// 居中对齐
/// </summary>
Center,
/// <summary>
/// 右对齐
/// </summary>
Right
}
#endregion
/// <summary>
/// UltraExcel操作类
/// </summary>
public class UltraExcelClass
{
#region 私有成员
private Workbook wBook; //工作本
private Worksheet wSheet; //工作簿
private string templateFile = string.Empty; //临时文件全名称
private int defaultColumnsWidth = 10 * ExcelDataConst.colWidth; //默认列宽
private int defaultZoom = 100; //默认页面设置(缩放)
private int defaultRowsHeight = 10 * ExcelDataConst.rowHeight; //默认行高
private PageOrientation pageOrientation = PageOrientation.Portrait; //默认页面设置(方向)
private PaperSize paperSize = PaperSize.A4; //默认纸张
private bool centerHorizontally = false; //默认水平居中方式
private bool centerVertically = false; //默认垂直居中方式
private double pageLeftMargin = 1.9 * ExcelDataConst.pageMargin; //默认左边距
private double pageRightMargin = 1.9 * ExcelDataConst.pageMargin; //默认右边距
private double pageTopMargin = 2.5 * ExcelDataConst.pageMargin; //默认上边距
private double pageBottomMargin = 2.5 * ExcelDataConst.pageMargin; //默认下边距
private string columnNameList = "ABCDEFGHIJKLMNOPQRSTUVWSYZ";
#endregion
#region [属性]WorkBook
/// <summary>
/// WorkBook
/// </summary>
public Workbook WorkBook
{
get
{
return this.wBook;
}
set
{
wBook = value;
}
}
#endregion
#region [属性]WorkSheet
/// <summary>
/// WorkSheet
/// </summary>
public Worksheet WorkSheet
{
get
{
return this.wSheet;
}
set
{
wSheet = value;
}
}
#endregion
#region [属性]Excel临时文件名
/// <summary>
/// Excel临时文件名(只针对使用Excel模板导出方式)
/// </summary>
public string TemplateFile
{
get
{
return this.templateFile;
}
}
#endregion
#region [属性]默认列宽
/// <summary>
/// 默认列宽
/// </summary>
public int DefaultColumnsWidth
{
set
{
this.defaultColumnsWidth = value * ExcelDataConst.colWidth;
this.SetDefaultColWidth();
}
}
#endregion
#region [属性]页面设置(缩放)
/// <summary>
/// 页面设置(缩放)
/// </summary>
public int DefaultZoom
{
set
{
this.defaultZoom = value;
this.SetPageZoom();
}
}
#endregion
#region [属性]默认行号
/// <summary>
/// 默认行号
/// </summary>
public int DefaultRowsHeight
{
set
{
this.defaultRowsHeight = value * ExcelDataConst.rowHeight;
this.SetDefaultRowHeight();
}
}
#endregion
#region [属性]页面设置(方向)
/// <summary>
/// 页面设置(方向)
/// </summary>
public PageOrientation PageOrientation
{
set
{
this.pageOrientation = value;
this.SetPageOrientation();
}
}
#endregion
#region [属性]页面设置(纸张大小)
/// <summary>
/// 页面设置(纸张大小)
/// </summary>
public PaperSize PaperSize
{
set
{
this.paperSize = value;
this.SetPaperSize();
}
}
#endregion
#region [属性]页面设置(水平居中方式)
/// <summary>
/// 页面设置(水平居中方式)
/// </summary>
public bool CenterHorizontally
{
set
{
this.centerHorizontally = value;
this.SetCenterHorizontally();
}
}
#endregion
#region [属性]页面设置(垂直居中方式)
/// <summary>
/// 页面设置(垂直居中方式)
/// </summary>
public bool CenterVertically
{
set
{
this.centerVertically = value;
this.SetCenterVertically();
}
}
#endregion
#region [属性]页面设置(页边距)
/// <summary>
/// 页面设置(页边距)
/// </summary>
public double PageLeftMargin
{
set
{
this.pageLeftMargin = value * ExcelDataConst.pageMargin;
this.SetPageMargin();
}
}
#endregion
#region [属性]页面设置(页边距)
/// <summary>
/// 页面设置(页边距)
/// </summary>
public double PageRightMargin
{
set
{
this.pageRightMargin = value * ExcelDataConst.pageMargin;
this.SetPageMargin();
}
}
#endregion
#region [属性]页面设置(页边距)
/// <summary>
/// 页面设置(页边距)
/// </summary>
public double PageTopMargin
{
set
{
this.pageTopMargin = value * ExcelDataConst.pageMargin;
this.SetPageMargin();
}
}
#endregion
#region [属性]页面设置(页边距)
/// <summary>
/// 页面设置(页边距)
/// </summary>
public double PageBottomMargin
{
set
{
this.pageBottomMargin = value * ExcelDataConst.pageMargin;
this.SetPageMargin();
}
}
#endregion
#region [方法]字符串反转
/// <summary>
/// 字符串反转(如:ABC转为CBA)
/// </summary>
/// <param name="str">字符串</param>
/// <returns>结果字符串</returns>
private string StringReverse(string str)
{
return new string(str.ToCharArray().Reverse<char>().ToArray<char>());
}
#endregion
#region [方法]构造函数
/// <summary>
/// 构造函数
/// </summary>
/// <param name="tempFileFullName">临时全名称</param>
public UltraExcelClass(string tempFileFullName)
{
try
{
this.templateFile = tempFileFullName;
this.wBook = new Workbook();
this.wBook = Workbook.Load(this.templateFile);
this.wSheet = this.wBook.Worksheets[0];
this.wBook.WindowOptions.SelectedWorksheet = this.wSheet;
}
catch (Exception xe)
{
throw new Exception(xe.Message);
}
}
#endregion
#region [方法]设置默认列宽
/// <summary>
/// 设置默认列宽
/// </summary>
private void SetDefaultColWidth()
{
this.wSheet.DefaultColumnWidth = defaultColumnsWidth;
}
#endregion
#region [方法]设置默认行高
/// <summary>
/// 设置默认行高
/// </summary>
private void SetDefaultRowHeight()
{
this.wSheet.DefaultRowHeight = defaultRowsHeight;
}
#endregion
#region [方法]页面设置(方向)
/// <summary>
/// 页面设置(方向)
/// </summary>
private void SetPageOrientation()
{
if (pageOrientation == PageOrientation.Landscape)
{
this.wSheet.PrintOptions.Orientation = Infragistics.Documents.Excel.Orientation.Landscape;
}
else
{
this.wSheet.PrintOptions.Orientation = Infragistics.Documents.Excel.Orientation.Portrait;
}
}
#endregion
#region [方法]页面设置(纸张大小)
/// <summary>
/// 页面设置(纸张大小)
/// </summary>
private void SetPaperSize()
{
switch (paperSize)
{
case PaperSize.A2:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.A2;
break;
case PaperSize.A3:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.A3;
break;
case PaperSize.A4:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.A4;
break;
case PaperSize.A5:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.A5;
break;
case PaperSize.A6:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.A6;
break;
case PaperSize.B4JIS:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.B4JIS;
break;
case PaperSize.B5JIS:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.B5JIS;
break;
case PaperSize.JapanesePost:
this.wSheet.PrintOptions.PaperSize = Infragistics.Documents.Excel.PaperSize.JapanesePostcard;
break;
}
}
#endregion
#region [方法]页面设置(水平居中方式)
/// <summary>
/// 页面设置(水平居中方式)
/// </summary>
private void SetCenterHorizontally()
{
this.wSheet.PrintOptions.CenterHorizontally = centerHorizontally;
}
#endregion
#region [方法]页面设置(垂直居中方式)
/// <summary>
/// 页面设置(垂直居中方式)
/// </summary>
private void SetCenterVertically()
{
this.wSheet.PrintOptions.CenterVertically = centerVertically;
}
#endregion
#region [方法]页面设置(页边距)
/// <summary>
/// 页面设置(页边距)
/// </summary>
private void SetPageMargin()
{
this.wSheet.PrintOptions.LeftMargin = this.pageLeftMargin;
this.wSheet.PrintOptions.RightMargin = this.pageRightMargin;
this.wSheet.PrintOptions.TopMargin = this.pageTopMargin;
this.wSheet.PrintOptions.BottomMargin = this.pageBottomMargin;
}
#endregion
#region [方法]页面设置(缩放)
/// <summary>
/// 页面设置(缩放)
/// </summary>
private void SetPageZoom()
{
this.wSheet.PrintOptions.ScalingType = ScalingType.UseScalingFactor;
this.wSheet.PrintOptions.ScalingFactor = this.defaultZoom;
}
#endregion
#region [方法]添加工作簿
/// <summary>
/// 添加工作簿
/// </summary>
public void AddSheet()
{
int num = this.wBook.Worksheets.Count + 1;
string sheetName = "Sheet" + num.ToString();
while (this.IsExistTheSheet(sheetName))
{
num++;
sheetName = "Sheet" + num.ToString();
}
this.wBook.WindowOptions.SelectedWorksheet = this.wBook.Worksheets.Add(sheetName);
this.wSheet = this.wBook.WindowOptions.SelectedWorksheet;
this.SetDefaultColWidth();
}
/// <summary>
/// 添加工作簿
/// </summary>
/// <param name="sheetName">sheet名称</param>
public void AddSheet(string sheetName)
{
if (this.IsExistTheSheet(sheetName))
{
throw new Exception("存在同名的Sheet页!");
}
this.wBook.WindowOptions.SelectedWorksheet = this.wBook.Worksheets.Add(sheetName);
this.wSheet = this.wBook.WindowOptions.SelectedWorksheet;
this.SetDefaultColWidth();
}
#endregion
#region [方法]是否存在相同的工作簿
/// <summary>
/// 是否存在相同的工作簿
/// </summary>
/// <param name="sheetName">sheet名称</param>
/// <returns>存在:true 不存在:false</returns>
private bool IsExistTheSheet(string sheetName)
{
for (int i = 0; i < this.wBook.Worksheets.Count; i++)
{
if (this.wBook.Worksheets[i].Name == sheetName)
{
return true;
}
}
return false;
}
#endregion
#region [方法]获取列索引
private int GetColumnIndex(string cellName)
{
double colIndex = 0;
string colName = string.Empty;
string colItem = string.Empty;
for (int iLoop = 0; iLoop < cellName.Length; iLoop++)
{
colItem = cellName.Substring(iLoop, 1);
int indexTxt = this.columnNameList.IndexOf(colItem);
if (indexTxt == -1)
{
break;
}
else
{
colName = cellName.Substring(0, iLoop + 1);
}
}
colName = this.StringReverse(colName);
for (int iLoop = 0; iLoop < colName.Length; iLoop++)
{
int indexTxt = this.columnNameList.IndexOf(colName.Substring(iLoop, 1));
if (indexTxt > -1)
{
colIndex += Math.Pow(this.columnNameList.Length, iLoop) * (indexTxt + 1);
}
else
{
break;
}
}
return int.Parse(colIndex.ToString()) - 1;
}
#endregion
#region [方法]单元格赋值
/// <summary>
/// 单元格赋值
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="cellValue">单元格值</param>
public void SetCellValueTxt(string cellName, string cellValue)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
if (cellValue == null)
{
this.wSheet.Rows[rowIndex].Cells[colIndex].Value = string.Empty;
}
else
{
IWorksheetCellFormat formatObj = this.wSheet.Rows[rowIndex].Cells[colIndex].CellFormat;
this.wSheet.Rows[rowIndex].Cells[colIndex].Value = cellValue;
this.wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.Alignment = formatObj.Alignment;
}
}
/// <summary>
/// 单元格赋值
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="cellValue">单元格值</param>
public void SetCellValueNum(string cellName, string cellValue)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
if (cellValue != null)
{
this.wSheet.Rows[rowIndex].Cells[colIndex].Value = double.Parse(cellValue);
}
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="startCellName">起始单元格(如:A1)</param>
/// <param name="endCellName">结束单元格(如:B1)</param>
/// <param name="isBold">加粗</param>
public void SetCellStyle(string startCellName, string endCellName, bool isBold)
{
int firstRow = this.GetRowIndex(startCellName);
int firstColumn = this.GetColumnIndex(startCellName);
int lastRow = this.GetRowIndex(endCellName);
int lastColumn = this.GetColumnIndex(endCellName);
int iLoop = firstRow > lastRow ? -1 : 1;
int jLoop = firstColumn > lastColumn ? -1 : 1;
int RowIndex = firstRow;
while (true)
{
int ColumnIndex = firstColumn;
while (true)
{
wSheet.Rows[RowIndex].Cells[ColumnIndex].CellFormat.Font.Bold = isBold ? ExcelDefaultableBoolean.True : ExcelDefaultableBoolean.False;
if (ColumnIndex == lastColumn) break;
ColumnIndex += jLoop;
}
if (RowIndex == lastRow) break;
RowIndex += iLoop;
}
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="startCellName">起始单元格(如:A1)</param>
/// <param name="endCellName">结束单元格(如:B1)</param>
/// <param name="vAlign">对齐方式</param>
public void SetCellStyle(string startCellName, string endCellName, VerticalCellAlignment vAlign)
{
int firstRow = this.GetRowIndex(startCellName);
int firstColumn = this.GetColumnIndex(startCellName);
int lastRow = this.GetRowIndex(endCellName);
int lastColumn = this.GetColumnIndex(endCellName);
int iLoop = firstRow > lastRow ? -1 : 1;
int jLoop = firstColumn > lastColumn ? -1 : 1;
int RowIndex = firstRow;
while (true)
{
int ColumnIndex = firstColumn;
while (true)
{
wSheet.Rows[RowIndex].Cells[ColumnIndex].CellFormat.VerticalAlignment = vAlign;
if (ColumnIndex == lastColumn) break;
ColumnIndex += jLoop;
}
if (RowIndex == lastRow) break;
RowIndex += iLoop;
}
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="fontName">字体,如:宋体</param>
/// <param name="fontHeight">字号</param>
public void SetCellStyle(string cellName, string fontName, int fontHeight)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.Font.Name = fontName;
wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.Font.Height = fontHeight;
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="isBold">加粗</param>
public void SetCellStyle(string cellName, bool isBold)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.Font.Bold = isBold ? ExcelDefaultableBoolean.True : ExcelDefaultableBoolean.False;
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="align">对齐方式</param>
public void SetCellStyle(string cellName, HorizontalCellAlignment align)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.Alignment = align;
}
/// <summary>
/// 设置单元格样式
/// </summary>
/// <param name="cellName">单元格名称(如:A1)</param>
/// <param name="vAlign">对齐方式</param>
public void SetCellStyle(string cellName, VerticalCellAlignment vAlign)
{
int rowIndex = this.GetRowIndex(cellName);
int colIndex = this.GetColumnIndex(cellName);
wSheet.Rows[rowIndex].Cells[colIndex].CellFormat.VerticalAlignment = vAlign;
}
#endregion
#region [方法]设置行单元格样式
/// <summary>
/// 设置行单元格样式
/// </summary>
/// <param name="rowIndex">行号</param>
/// <param name="fontName">字体,如:宋体</param>
/// <param name="fontHeight">字号</param>
public void SetRowCellStyle(int rowIndex, string fontName, int fontHeight)
{
wSheet.Rows[rowIndex - 1].CellFormat.Font.Name = fontName;
wSheet.Rows[rowIndex - 1].CellFormat.Font.Height = fontHeight;
}
/// <summary>
/// 设置行单元格样式
/// </summary>
/// <param name="rowIndex">行号</param>
/// <param name="isBold">加粗</param>
public void SetRowCellStyle(int rowIndex, bool isBold)
{
wSheet.Rows[rowIndex - 1].CellFormat.Font.Bold = isBold ? ExcelDefaultableBoolean.True : ExcelDefaultableBoolean.False;
}
/// <summary>
/// 设置行单元格样式
/// </summary>
/// <param name="rowIndex">行号</param>
/// <param name="align">对齐方式</param>
public void SetRowCellStyle(int rowIndex, HorizontalCellAlignment align)
{
wSheet.Rows[rowIndex - 1].CellFormat.Alignment = align;
}
/// <summary>
/// 设置行单元格样式
/// </summary>
/// <param name="rowIndex">行号</param>
/// <param name="vAlign">对齐方式</param>
public void SetRowCellStyle(int rowIndex, VerticalCellAlignment vAlign)
{
wSheet.Rows[rowIndex - 1].CellFormat.VerticalAlignment = vAlign;
}
#endregion
#region [方法]设置列单元格样式
/// <summary>
/// 设置列单元格样式
/// </summary>
/// <param name="colName">列名</param>
/// <param name="fontName">字体,如:宋体</param>
/// <param name="fontHeight">字号</param>
public void SetColumnCellStyle(string colName, string fontName, int fontHeight)
{
int colIndex = this.GetColumnIndex(colName);
wSheet.Columns[colIndex].CellFormat.Font.Name = fontName;
wSheet.Columns[colIndex].CellFormat.Font.Height = fontHeight;
}
/// <summary>
/// 设置列单元格样式
/// </summary>
/// <param name="colName">列名</param>
/// <param name="isBold">加粗</param>
public void SetColumnCellStyle(string colName, bool isBold)
{
int colIndex = this.GetColumnIndex(colName);
wSheet.Columns[colIndex].CellFormat.Font.Bold = isBold ? ExcelDefaultableBoolean.True : ExcelDefaultableBoolean.False;
}
/// <summary>
/// 设置列单元格样式
/// </summary>
/// <param name="colName">列名</param>
/// <param name="align">对齐方式</param>
public void SetColumnCellStyle(string colName, HorizontalCellAlignment align)
{
int colIndex = this.GetColumnIndex(colName);
wSheet.Columns[colIndex].CellFormat.Alignment = align;
}
/// <summary>
/// 设置列单元格样式
/// </summary>
/// <param name="colName">列名</param>
/// <param name="vAlign">对齐方式</param>
public void SetColumnCellStyle(string colName, VerticalCellAlignment vAlign)
{
int colIndex = this.GetColumnIndex(colName);
wSheet.Columns[colIndex].CellFormat.VerticalAlignment = vAlign;
}
#endregion
#region [方法]设置行高
/// <summary>
/// 设置行高
/// </summary>
/// <param name="rowIndex">行号</param>
/// <param name="rowHeight">行高</param>
public void SetRowHeight(int rowIndex, int rowHeight)
{
wSheet.Rows[rowIndex - 1].Height = rowHeight;
}
#endregion
#region [方法]设置列宽
/// <summary>
/// 设置列宽
/// </summary>
/// <param name="colName">列名</param>
/// <param name="colWidth">宽度</param>
public void SetColWidth(string colName, int colWidth)
{
int colIndex = this.GetColumnIndex(colName);
wSheet.Columns[colIndex].Width = colWidth * ExcelDataConst.colWidth;
}
#endregion
#region [方法]合并单元格
/// <summary>
/// 合并单元格
/// </summary>
/// <param name="startCellName">起始单元格(如:A1)</param>
/// <param name="endCellName">结束单元格(如:B1)</param>
public void MergedCells(string startCellName, string endCellName)
{
int firstRow = this.GetRowIndex(startCellName);
int firstColumn = this.GetColumnIndex(startCellName);
int lastRow = this.GetRowIndex(endCellName);
int lastColumn = this.GetColumnIndex(endCellName);
this.wSheet.MergedCellsRegions.Add(firstRow, firstColumn, lastRow, lastColumn);
}
#endregion
#region [方法]保护WorkSheet
/// <summary>
/// 保护WorkSheet
/// </summary>
/// <param name="isProtected">是否保护</param>
public void ProtectedWorkSheet(bool isProtected)
{
this.wSheet.Protected = isProtected;
}
#endregion
#region [方法]保护WorkBook
/// <summary>
/// 保护WorkBook
/// </summary>
/// <param name="isProtected">是否保护</param>
public void ProtectedWorkBook(bool isProtected)
{
this.wBook.Protected = isProtected;
}
#endregion
#region [方法]保存并关闭Excel文件
/// <summary>
/// 保存并关闭Excel文件
/// </summary>
public void SaveAndCloseFile()
{
this.wBook.Save(this.templateFile);
}
#endregion
}
}
边栏推荐
猜你喜欢
arithmetic operation
Activiti目录(五)驳回、重新发起、取消流程
Yao BanZhi and his team came together, and the competition experts gathered together. What fairy programming competition is this?
TCP的三次握手和四次挥手
手把手带你做强化学习实验--敲级详细
ByteDance overseas technical team won the championship again: HD video coding has won the first place in 17 items
Activit零零碎碎要人命的坑
Assembly language addressing mode
MySQL string function
Jetpack compose 1.1 release, based on kotlin's Android UI Toolkit
随机推荐
Only learning C can live up to expectations TOP4 S1E6: data type
微信防撤回是怎么实现的?
Only learning C can live up to expectations Top1 environment configuration
Activiti directory (I) highlights
Take you hand-in-hand to do intensive learning experiments -- knock the level in detail
Set up the flutter environment pit collection
CentOS7上Redis安装
连接局域网MySql
Activiti目录(三)部署流程、发起流程
吴军三部曲见识(四) 大家智慧
TCP's three handshakes and four waves
MySQL字符串函数
koa中间件
CTF逆向入门题——掷骰子
MySQL数字函数
In the command mode in the VI editor, delete the character usage at the current cursor__ Command.
8086 CPU internal structure
yum install xxx报错
汇编语言寻址方式
手把手带你做强化学习实验--敲级详细