当前位置:网站首页>基于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
}
}边栏推荐
- Only learning C can live up to expectations top2 P1 variable
- 手把手带你做强化学习实验--敲级详细
- Serial serialold parnew of JVM garbage collector
- 【逆向初级】独树一帜
- Learn the wisdom of investment Masters
- JVM garbage collector part 2
- Eight part essay that everyone likes
- Log4j2 major vulnerabilities and Solutions
- Flink源码解读(二):JobGraph源码解读
- GCC error: terminate called after throwing an instance of 'std:: regex_ error‘ what(): regex
猜你喜欢

1. Introduction to JVM

Set up the flutter environment pit collection

数据传送指令

Many papers on ByteDance have been selected into CVPR 2021, and the selected dry goods are here

吴军三部曲见识(五) 拒绝伪工作者

Akamai anti confusion

Install docker under windows10 (through Oracle VM VirtualBox)

TCP's three handshakes and four waves

The daemon thread starts redis and modifies the configuration file

arithmetic operation
随机推荐
MySQL数字函数
Flink 解析(七):时间窗口
Yao BanZhi and his team came together, and the competition experts gathered together. What fairy programming competition is this?
vscode
À propos de l'utilisation intelligente du flux et de la carte
JVM class loading subsystem
Train 100 pictures for 1 hour, and the style of the photos changes at will. There is a demo at the end of the article | siggraph 2021
GCC error: terminate called after throwing an instance of 'std:: regex_ error‘ what(): regex
MySQL字符串函数
Shawshank's sense of redemption
mysql的合计/统计函数
唯有学C不负众望 TOP1环境配置
Von Neumann architecture
Activit零零碎碎要人命的坑
Redis快速入门
JVM 垃圾回收器之Garbage First
The difference between URI and URL
MySQL日期函数
Mongodb在node中的使用
【MMdetection】一文解决安装问题