(转载)数据导出到execl (一键下载式)

给出了完整的代码示例:
   使用了java反射,对数据进行处理.所以属性取数据方法必须是getXxx 而不能是isXxx包括 boolean类型的 需要修改下
    使用了开源组件POI导出execl数据
    为了示例简单,写了个User(name,sex,age)
   支持泛型,只需要将类上加上<T> 所有使用的User修改为T就可以放入项目中
   
    数据处理设置了doto标记,很容易发现 里面写出了处理例子

    web项目中要页面下载的话  只要把out参数替换成下面这样就可以了
      其他参数和main中一样.

引用

// 这就是典型的下载提示样式了.选择打开 保存 取消 用户可以重命名 
this.httpServletResponse.setHeader("Content-disposition", "attachment;filename=InfoLogger.xls");//显示的随机文件名,可以用这个保存或另起一个名 
  this.httpServletResponse.setContentType("application/octet-stream");

//输出流参数.将数据放入response中.
OutputStream out = this.httpServletResponse.getOutputStream();

        //action最后加上这个,就会下载文件了
this.httpServletResponse.setStatus(this.httpServletResponse.SC_OK);
this.httpServletResponse.flushBuffer();





   主类:ExportExcel.java(修改了下达叔提供这个) main(String[] s)和导出方法

Java代码 复制代码
  1.   
  2. import java.io.FileNotFoundException;   
  3. import java.io.FileOutputStream;   
  4. import java.io.IOException;   
  5. import java.io.OutputStream;   
  6. import java.lang.reflect.Field;   
  7. import java.lang.reflect.InvocationTargetException;   
  8. import java.lang.reflect.Method;   
  9. import java.text.SimpleDateFormat;   
  10. import java.util.ArrayList;   
  11. import java.util.Collection;   
  12. import java.util.Date;   
  13. import java.util.Iterator;   
  14. import java.util.List;   
  15. import java.util.regex.Matcher;   
  16. import java.util.regex.Pattern;   
  17. import org.apache.poi.hssf.usermodel.HSSFCell;   
  18. import org.apache.poi.hssf.usermodel.HSSFCellStyle;   
  19. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;   
  20. import org.apache.poi.hssf.usermodel.HSSFComment;   
  21. import org.apache.poi.hssf.usermodel.HSSFFont;   
  22. import org.apache.poi.hssf.usermodel.HSSFPatriarch;   
  23. import org.apache.poi.hssf.usermodel.HSSFRichTextString;   
  24. import org.apache.poi.hssf.usermodel.HSSFRow;   
  25. import org.apache.poi.hssf.usermodel.HSSFSheet;   
  26. import org.apache.poi.hssf.usermodel.HSSFWorkbook;   
  27. import org.apache.poi.hssf.util.HSSFColor;   
  28.   
  29.   
  30. /**  
  31.  *   
  32.  * 利用开源组件POI3.0.2动态导出EXCEL文档 转载时请保留以下信息,注明出处!  
  33.  *   
  34.  * @author fx  
  35.  * @param <User>  
  36.  *  应用泛型,代表任意一个符合javabean风格的类  
  37.  * 注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()  
  38.  * byte[]表jpg格式的图片数据  
  39.  */  
  40. public class ExportExcel {   
  41.        
  42.     public static void main(String[] args){   
  43.            
  44.         //------数据参数   
  45.         User user ;   
  46.         List<User> list = new ArrayList<User>();   
  47.         for(int i=0;i<10;i++){   
  48.             user =new User();   
  49.             user.setName("乌龟"+i);   
  50.             user.setAge(100);   
  51.             if(i/2==1){   
  52.                 user.setSex(true);   
  53. //              System.out.println("-----"+user.getSex());   
  54.             }else{   
  55.                 user.setSex(false);   
  56.             }   
  57.             list.add(user);   
  58.         }   
  59.            
  60.            
  61.         //输出流参数   
  62.         String file="d:/InfoLogger.xls";//设置输出流   
  63.         FileOutputStream out=null;   
  64.         try {   
  65.                 out= new FileOutputStream(file);   
  66.         } catch (FileNotFoundException e) {   
  67.             e.printStackTrace();   
  68.             e=null;   
  69.         }   
  70.            
  71.         //列头参数名称   
  72.         String[] str={"姓名","性别","年龄"};   
  73.            
  74.         //标题参数    
  75.         String title="FCK";   
  76.            
  77.         //时间格式参数   
  78.         String fomatStr="yyyy-MM-dd";   
  79.            
  80.         //这是个例子,按照这个调用,   
  81.         exportExcel(title,str,list,out,fomatStr);   
  82.     }   
  83.        
  84.   
  85.   
  86.   
  87.     /**  
  88.      * 这是一个通用的方法,利用了JAVA的反射机制,  
  89.      * 可以将放置在JAVA集合中并且符合一定条件的数据以EXCEL的形式输出到指定IO设备上  
  90.      * @param title 表格标题名  
  91.      * @param headers 表格属性列名数组  
  92.      * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。  
  93.      * 此方法支持的 javabean属性【数据类型有java基本数据类型及String,Date,byte[](图片转成字节码)】  
  94.      * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中  
  95.      * @param pattern  如果有时间数据,设定输出格式。默认为"yyy-MM-dd"  
  96.      */  
  97.   
  98.     @SuppressWarnings("unused")   
  99.     static void exportExcel(String title, String[] headers,   
  100.             Collection<User> dataset, OutputStream out, String pattern) {   
  101.         // 声明一个工作薄   
  102.         HSSFWorkbook workbook = new HSSFWorkbook();   
  103.         // 生成一个表格   
  104.         HSSFSheet sheet = workbook.createSheet(title);   
  105.         // 设置表格默认列宽度为15个字节   
  106.         sheet.setDefaultColumnWidth((short15);   
  107.         // 生成一个样式   
  108.         HSSFCellStyle style = workbook.createCellStyle();   
  109.         // 设置这些样式   
  110.         style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);   
  111.         style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);   
  112.         style.setBorderBottom(HSSFCellStyle.BORDER_THIN);   
  113.         style.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
  114.         style.setBorderRight(HSSFCellStyle.BORDER_THIN);   
  115.         style.setBorderTop(HSSFCellStyle.BORDER_THIN);   
  116.         style.setAlignment(HSSFCellStyle.ALIGN_CENTER);   
  117.         // 生成一个字体   
  118.         HSSFFont font = workbook.createFont();   
  119.         font.setColor(HSSFColor.VIOLET.index);   
  120.         font.setFontHeightInPoints((short12);   
  121.         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);   
  122.         // 把字体应用到当前的样式   
  123.         style.setFont(font);   
  124.         // 生成并设置另一个样式   
  125.         HSSFCellStyle style2 = workbook.createCellStyle();   
  126.         style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);   
  127.         style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);   
  128.         style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);   
  129.         style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);   
  130.         style2.setBorderRight(HSSFCellStyle.BORDER_THIN);   
  131.         style2.setBorderTop(HSSFCellStyle.BORDER_THIN);   
  132.         style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);   
  133.         style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);   
  134.         // 生成另一个字体   
  135.         HSSFFont font2 = workbook.createFont();   
  136.         font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);   
  137.         // 把字体应用到当前的样式   
  138.         style2.setFont(font2);   
  139.         // 声明一个画图的顶级管理器   
  140.         HSSFPatriarch patriarch = sheet.createDrawingPatriarch();   
  141.         // 定义注释的大小和位置,详见文档   
  142.         HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,   
  143.                 000, (short42, (short65));   
  144.         // 设置注释内容   
  145.         comment.setString(new HSSFRichTextString("注释!"));   
  146.         // 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.   
  147.         comment.setAuthor("ape-tech");   
  148.         // 产生表格标题行   
  149.         HSSFRow row = sheet.createRow(0);   
  150.         for (short i = 0; i < headers.length; i++) {   
  151.             HSSFCell cell = row.createCell(i);   
  152.             cell.setCellStyle(style);   
  153.             HSSFRichTextString text = new HSSFRichTextString(headers[i]);   
  154.             cell.setCellValue(text);   
  155.         }   
  156.            
  157.         // 遍历集合数据,产生数据行   
  158.         Iterator<User> it = dataset.iterator();   
  159.         int index = 0;   
  160.         while (it.hasNext()) {   
  161.             index++;   
  162.             row = sheet.createRow(index);   
  163.             User t = (User) it.next();   
  164.             // 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值   
  165.             Field[] fields = t.getClass().getDeclaredFields();   
  166.             for (short i = 0; i < fields.length; i++) {   
  167.                 HSSFCell cell = row.createCell(i);   
  168.                 cell.setCellStyle(style2);   
  169.                 Field field = fields[i];   
  170.                 String fieldName = field.getName();   
  171.                 //fieldName 属性名 如果对属性需要处理的话.用这个区分***我用性别做处理吧    
  172.                 //   
  173.                 String getMethodName = "get"  
  174.                         + fieldName.substring(01).toUpperCase()   
  175.                         + fieldName.substring(1);//注意 实体get Set不要自己改名字不然反射会有问题   
  176.                 try {   
  177.                     @SuppressWarnings("rawtypes")   
  178.                     Class tCls = t.getClass();   
  179.                     Method getMethod = tCls.getMethod(getMethodName,   
  180.                             new Class[] {});   
  181.                     Object value = getMethod.invoke(t, new Object[] {});   
  182.                        
  183.                     // TODO begin 注意这段  是对属性的值进行处理   
  184.                        
  185.                    这是个例子://假设对年龄做了处理 都帮乌龟们减点小寿命   
  186.                        if(fieldName.equals("age")){   
  187.                            int num =(Integer)value;   
  188.                            System.out.println("这只王八"+num+"岁了");   
  189.                        }   
  190.                        
  191.                            
  192.                     // 判断值的类型后进行强制类型转换   
  193.                     String textValue = null;   
  194.                        //有boolean类型时   
  195.                     if (value instanceof Boolean) {   
  196.                         boolean bValue = (Boolean)value;   
  197.                             textValue = "男";   
  198.                         if (!bValue) {   
  199.                             textValue = "女";   
  200.                         }   
  201.                            
  202.                     } else if (value instanceof Date) {   
  203.                         Date date = (Date) value;   
  204.                         SimpleDateFormat sdf = new SimpleDateFormat(pattern);   
  205.                         textValue = sdf.format(date);   
  206.                     } else if (value instanceof byte[]) {   
  207.                         // 有图片时设置行高为60px;   
  208.                         row.setHeightInPoints(60);   
  209.                         // 设置图片所在列宽度为80px,注意这里单位的一个换算   
  210.                         sheet.setColumnWidth(i, (short) (35.7 * 80));   
  211.                         // sheet.autoSizeColumn(i);   
  212.                         byte[] bsValue = (byte[]) value;   
  213.                         HSSFClientAnchor anchor = new HSSFClientAnchor(00,   
  214.                                 1023255, (short6, index, (short6, index);   
  215.                         anchor.setAnchorType(2);   
  216.                         patriarch.createPicture(anchor, workbook.addPicture(   
  217.                                 bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));   
  218.                     } else {   
  219.                         // 其它数据类型都当作字符串处理   
  220.                         textValue = value.toString();   
  221.                     }   
  222.                        
  223.                     // TODO   
  224.                        
  225.                     // 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成   
  226.                     if (textValue != null) {   
  227.                         Pattern p = Pattern.compile("^\\d+(\\.\\d+)?$");   
  228.                         Matcher matcher = p.matcher(textValue);   
  229.                         if (matcher.matches()) {   
  230.                             // 是数字当作double处理   
  231.                             cell.setCellValue(Double.parseDouble(textValue));   
  232.                         } else {   
  233.                             HSSFRichTextString richString = new HSSFRichTextString(   
  234.                                     textValue);   
  235.                             HSSFFont font3 = workbook.createFont();   
  236.                             font3.setColor(HSSFColor.BLUE.index);   
  237.                             richString.applyFont(font3);   
  238.                             cell.setCellValue(richString);   
  239.                         }   
  240.                     }   
  241.                 } catch (SecurityException e) {   
  242.                     e.printStackTrace();   
  243.                     e=null;   
  244.                 } catch (NoSuchMethodException e) {   
  245.                     e.printStackTrace();   
  246.                     e=null;   
  247.                 } catch (IllegalArgumentException e) {   
  248.                     e.printStackTrace();   
  249.                     e=null;   
  250.                 } catch (IllegalAccessException e) {   
  251.                     e.printStackTrace();   
  252.                     e=null;   
  253.                 } catch (InvocationTargetException e) {   
  254.                     e.printStackTrace();   
  255.                     e=null;   
  256.                 } finally {   
  257.                     // 清理资源   
  258.                 }   
  259.             }   
  260.         }   
  261.         try {   
  262.             workbook.write(out);   
  263.         } catch (IOException e) {   
  264.             e.printStackTrace();   
  265.             e=null;   
  266.         }   
  267.     }   
  268. }  
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFComment;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFPatriarch;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;


/**
 * 
 * 利用开源组件POI3.0.2动态导出EXCEL文档 转载时请保留以下信息,注明出处!
 * 
 * @author fx
 * @param <User>
 *  应用泛型,代表任意一个符合javabean风格的类
 * 注意这里为了简单起见,boolean型的属性xxx的get器方式为getXxx(),而不是isXxx()
 * byte[]表jpg格式的图片数据
 */
public class ExportExcel {
	
	public static void main(String[] args){
		
		//------数据参数
		User user ;
		List<User> list = new ArrayList<User>();
		for(int i=0;i<10;i++){
			user =new User();
			user.setName("乌龟"+i);
			user.setAge(100);
			if(i/2==1){
				user.setSex(true);
//				System.out.println("-----"+user.getSex());
			}else{
				user.setSex(false);
			}
			list.add(user);
		}
		
		
		//输出流参数
		String file="d:/InfoLogger.xls";//设置输出流
		FileOutputStream out=null;
		try {
			    out= new FileOutputStream(file);
	  	} catch (FileNotFoundException e) {
			e.printStackTrace();
			e=null;
		}
		
		//列头参数名称
	  	String[] str={"姓名","性别","年龄"};
	  	
	  	//标题参数 
	  	String title="FCK";
		
	  	//时间格式参数
	  	String fomatStr="yyyy-MM-dd";
	  	
	  	//这是个例子,按照这个调用,
	  	exportExcel(title,str,list,out,fomatStr);
	}
	



	/**
	 * 这是一个通用的方法,利用了JAVA的反射机制,
	 * 可以将放置在JAVA集合中并且符合一定条件的数据以EXCEL的形式输出到指定IO设备上
	 * @param title 表格标题名
	 * @param headers 表格属性列名数组
	 * @param dataset 需要显示的数据集合,集合中一定要放置符合javabean风格的类的对象。
	 * 此方法支持的 javabean属性【数据类型有java基本数据类型及String,Date,byte[](图片转成字节码)】
	 * @param out 与输出设备关联的流对象,可以将EXCEL文档导出到本地文件或者网络中
	 * @param pattern  如果有时间数据,设定输出格式。默认为"yyy-MM-dd"
	 */

	@SuppressWarnings("unused")
	static void exportExcel(String title, String[] headers,
			Collection<User> dataset, OutputStream out, String pattern) {
		// 声明一个工作薄
		HSSFWorkbook workbook = new HSSFWorkbook();
		// 生成一个表格
		HSSFSheet sheet = workbook.createSheet(title);
		// 设置表格默认列宽度为15个字节
		sheet.setDefaultColumnWidth((short) 15);
		// 生成一个样式
		HSSFCellStyle style = workbook.createCellStyle();
		// 设置这些样式
		style.setFillForegroundColor(HSSFColor.SKY_BLUE.index);
		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style.setBorderTop(HSSFCellStyle.BORDER_THIN);
		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		// 生成一个字体
		HSSFFont font = workbook.createFont();
		font.setColor(HSSFColor.VIOLET.index);
		font.setFontHeightInPoints((short) 12);
		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		// 把字体应用到当前的样式
		style.setFont(font);
		// 生成并设置另一个样式
		HSSFCellStyle style2 = workbook.createCellStyle();
		style2.setFillForegroundColor(HSSFColor.LIGHT_YELLOW.index);
		style2.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
		style2.setBorderBottom(HSSFCellStyle.BORDER_THIN);
		style2.setBorderLeft(HSSFCellStyle.BORDER_THIN);
		style2.setBorderRight(HSSFCellStyle.BORDER_THIN);
		style2.setBorderTop(HSSFCellStyle.BORDER_THIN);
		style2.setAlignment(HSSFCellStyle.ALIGN_CENTER);
		style2.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
		// 生成另一个字体
		HSSFFont font2 = workbook.createFont();
		font2.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);
		// 把字体应用到当前的样式
		style2.setFont(font2);
		// 声明一个画图的顶级管理器
		HSSFPatriarch patriarch = sheet.createDrawingPatriarch();
		// 定义注释的大小和位置,详见文档
		HSSFComment comment = patriarch.createComment(new HSSFClientAnchor(0,
				0, 0, 0, (short) 4, 2, (short) 6, 5));
		// 设置注释内容
		comment.setString(new HSSFRichTextString("注释!"));
		// 设置注释作者,当鼠标移动到单元格上是可以在状态栏中看到该内容.
		comment.setAuthor("ape-tech");
		// 产生表格标题行
		HSSFRow row = sheet.createRow(0);
		for (short i = 0; i < headers.length; i++) {
			HSSFCell cell = row.createCell(i);
			cell.setCellStyle(style);
			HSSFRichTextString text = new HSSFRichTextString(headers[i]);
			cell.setCellValue(text);
		}
		
		// 遍历集合数据,产生数据行
		Iterator<User> it = dataset.iterator();
		int index = 0;
		while (it.hasNext()) {
			index++;
			row = sheet.createRow(index);
			User t = (User) it.next();
			// 利用反射,根据javabean属性的先后顺序,动态调用getXxx()方法得到属性值
			Field[] fields = t.getClass().getDeclaredFields();
			for (short i = 0; i < fields.length; i++) {
				HSSFCell cell = row.createCell(i);
				cell.setCellStyle(style2);
				Field field = fields[i];
				String fieldName = field.getName();
				//fieldName 属性名 如果对属性需要处理的话.用这个区分***我用性别做处理吧 
				//
				String getMethodName = "get"
						+ fieldName.substring(0, 1).toUpperCase()
						+ fieldName.substring(1);//注意 实体get Set不要自己改名字不然反射会有问题
				try {
					@SuppressWarnings("rawtypes")
					Class tCls = t.getClass();
					Method getMethod = tCls.getMethod(getMethodName,
							new Class[] {});
					Object value = getMethod.invoke(t, new Object[] {});
					
					// TODO begin 注意这段  是对属性的值进行处理
					
				   这是个例子://假设对年龄做了处理 都帮乌龟们减点小寿命
					   if(fieldName.equals("age")){
						   int num =(Integer)value;
						   System.out.println("这只王八"+num+"岁了");
					   }
					
						
					// 判断值的类型后进行强制类型转换
					String textValue = null;
					   //有boolean类型时
					if (value instanceof Boolean) {
						boolean bValue = (Boolean)value;
							textValue = "男";
						if (!bValue) {
							textValue = "女";
						}
						
					} else if (value instanceof Date) {
						Date date = (Date) value;
						SimpleDateFormat sdf = new SimpleDateFormat(pattern);
						textValue = sdf.format(date);
					} else if (value instanceof byte[]) {
						// 有图片时设置行高为60px;
						row.setHeightInPoints(60);
						// 设置图片所在列宽度为80px,注意这里单位的一个换算
						sheet.setColumnWidth(i, (short) (35.7 * 80));
						// sheet.autoSizeColumn(i);
						byte[] bsValue = (byte[]) value;
						HSSFClientAnchor anchor = new HSSFClientAnchor(0, 0,
								1023, 255, (short) 6, index, (short) 6, index);
						anchor.setAnchorType(2);
						patriarch.createPicture(anchor, workbook.addPicture(
								bsValue, HSSFWorkbook.PICTURE_TYPE_JPEG));
					} else {
						// 其它数据类型都当作字符串处理
						textValue = value.toString();
					}
					
					// TODO
					
					// 如果不是图片数据,就利用正则表达式判断textValue是否全部由数字组成
					if (textValue != null) {
						Pattern p = Pattern.compile("^\\d+(\\.\\d+)?$");
						Matcher matcher = p.matcher(textValue);
						if (matcher.matches()) {
							// 是数字当作double处理
							cell.setCellValue(Double.parseDouble(textValue));
						} else {
							HSSFRichTextString richString = new HSSFRichTextString(
									textValue);
							HSSFFont font3 = workbook.createFont();
							font3.setColor(HSSFColor.BLUE.index);
							richString.applyFont(font3);
							cell.setCellValue(richString);
						}
					}
				} catch (SecurityException e) {
					e.printStackTrace();
					e=null;
				} catch (NoSuchMethodException e) {
					e.printStackTrace();
					e=null;
				} catch (IllegalArgumentException e) {
					e.printStackTrace();
					e=null;
				} catch (IllegalAccessException e) {
					e.printStackTrace();
					e=null;
				} catch (InvocationTargetException e) {
					e.printStackTrace();
					e=null;
				} finally {
					// 清理资源
				}
			}
		}
		try {
			workbook.write(out);
		} catch (IOException e) {
			e.printStackTrace();
			e=null;
		}
	}
}



实体很简单.User 提供到下载里面就是
需要用到的jar也要下载导入项目中
  结果:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值