excel 写入数据并发送到指定邮箱
今天公司要实现这个功能就搜索并实现了
附上代码,方便以后使用:
excel操作类
static String Filename = "C:/Users/Administrator/Desktop/new.xlsx";
 /**
	 * 生成一个Excel文件
	 */
	public static void writeExcel(String name) {
		WritableWorkbook wwb = null;
		try {
			// 创建一个可写入的工作薄(Workbook)对象
			wwb = Workbook.createWorkbook(new File(Filename));
		} catch (IOException e) {// 捕获流异常
			e.printStackTrace();
		}
		if (wwb != null) {
			// 创建一个可写入的工作表
			// Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置
			WritableSheet ws = wwb.createSheet("sheet1", 0);
			// for (int i = 0; i < 10; i++) {// 循环添加单元格
			// for (int j = 0; j < 5; j++) {
			// Label labelC = new Label(j, i, "这是第" + (i + 1) + "行,第" + (j + 1)
			// + "列");
			// try {
			// ws.addCell(labelC);// 将生成的单元格添加到工作表中
			// } catch (Exception e) {// 捕获异常
			// e.printStackTrace();
			// }
			// }
			// }
			try {
				wwb.write();// 从内存中写入文件中
				wwb.close();// 从内存中写入文件中
			} catch (Exception e) {// 捕获异常
				e.printStackTrace();
			}
		}
		System.out.println("生成一个Excel文件成功!");
	}
	/**
	 * 将内容写入
	 * 
	 * @param fileName
	 * @throws Exception
	 */
	public static void writeContentToExcel(String fileName, Map<String, Object> map) throws Exception {
		File tempFile = new File(fileName);
		WritableWorkbook workbook = Workbook.createWorkbook(tempFile);
		WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);
		// 一些临时变量,用于写到excel中
		Label l = null;
		jxl.write.Number n = null;
		jxl.write.DateTime d = null;
		// 预定义的一些字体和格式,同一个Excel中最好不要有太多格式 字形 大小 加粗 倾斜 下划线 颜色
		WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, false,
				UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLUE);
		WritableCellFormat headerFormat = new WritableCellFormat(headerFont);
		WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
				UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
		WritableCellFormat titleFormat = new WritableCellFormat(titleFont);
		WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,
				UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.BLACK);
		WritableCellFormat detFormat = new WritableCellFormat(detFont);
		NumberFormat nf = new NumberFormat("0.00000"); // 用于Number的格式
		WritableCellFormat priceFormat = new WritableCellFormat(detFont, nf);
		DateFormat df = new DateFormat("yyyy-MM-dd");// 用于日期的
		WritableCellFormat dateFormat = new WritableCellFormat(detFont, df);
		// 标题
		// label(列,行,值,格式)
		int seq = 0;
		l = new Label(seq++, 0, "序号", titleFormat);
		sheet.addCell(l);
		l = new Label(1, 0, "债券代码", titleFormat);
		sheet.addCell(l);
		l = new Label(2, 0, "债券简称", titleFormat);
		sheet.addCell(l);
		l = new Label(3, 0, "发债人名称", titleFormat);
		sheet.addCell(l);
		l = new Label(4, 0, "评审类型", titleFormat);
		sheet.addCell(l);
		l = new Label(5, 0, "评级日期", titleFormat);
		sheet.addCell(l);
		l = new Label(6, 0, "最新评级", titleFormat);
		sheet.addCell(l);
		l = new Label(7, 0, "首次评级", titleFormat);
		sheet.addCell(l);
		l = new Label(8, 0, "变动方向", titleFormat);
		sheet.addCell(l);
		l = new Label(9, 0, "评级结构", titleFormat);
		sheet.addCell(l);
		l = new Label(10, 0, "评级公告", titleFormat);
		sheet.addCell(l);
		Set<String> key = map.keySet();
		for (Iterator it = key.iterator(); it.hasNext();) {
			String s = (String) it.next();
			// 一层代码对应的内容,二层评级对应list,三层评级内容
			Map<String, Object> dataMap = (Map<String, Object>) map.get(s);
			Set<String> key2 = dataMap.keySet();
			for (Iterator it2 = key2.iterator(); it2.hasNext();) {
				int row = 0;
				String s2 = (String) it2.next();
				if ("主体评级".equals(s2)) {
					List<DBondIssCredChan> bongIss = (List<DBondIssCredChan>) dataMap.get(s2);
					for (DBondIssCredChan b : bongIss) {
						int col = seq++;
						l = new Label(row++, col, String.valueOf(seq));
						sheet.addCell(l);
						l = new Label(row++, col, s);
						sheet.addCell(l);
						l = new Label(row++, col, b.getBondShortName());
						sheet.addCell(l);
						l = new Label(row++, col, b.getReserName());
						sheet.addCell(l);
						l = new Label(row++, col, s2);
						sheet.addCell(l);
						l = new Label(row++, col, String.valueOf(b.getRatePublDate()));
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, b.getOrgUniName());
						sheet.addCell(l);
						l = new Label(row++, col, "查看");
						sheet.addCell(l);
					}
				}
				if ("债项评级".equals(s2)) {
					List<DBondCredChan> bongCred = (List<DBondCredChan>) dataMap.get(s2);
					for (DBondCredChan b : bongCred) {
						int col = seq++;
						l = new Label(row++, col, String.valueOf(seq));
						sheet.addCell(l);
						l = new Label(row++, col, s);
						sheet.addCell(l);
						l = new Label(row++, col, b.getBondShortName());
						sheet.addCell(l);
						l = new Label(row++, col, b.getReserName());
						sheet.addCell(l);
						l = new Label(row++, col, s2);
						sheet.addCell(l);
						l = new Label(row++, col, String.valueOf(b.getRatePublDate()));
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, "");
						sheet.addCell(l);
						l = new Label(row++, col, b.getOrgUniName());
						sheet.addCell(l);
						l = new Label(row++, col, "查看");
						sheet.addCell(l);
					}
				}
			}
		}
		seq += 3;
		// 公告
		int row = seq++;
		l = new Label(0, row, "序号", titleFormat);
		sheet.addCell(l);
		l = new Label(1, row, "标题", titleFormat);
		sheet.addCell(l);
		l = new Label(2, row, "来源", titleFormat);
		sheet.addCell(l);
		l = new Label(3, row, "时间", titleFormat);
		sheet.addCell(l);
		l = new Label(4, row, "关联组合", titleFormat);
		sheet.addCell(l);
		l = new Label(5, row, "关联证券", titleFormat);
		sheet.addCell(l);
		l = new Label(6, row, "关联机构", titleFormat);
		sheet.addCell(l);
		int num = 0;
		for (Iterator it = key.iterator(); it.hasNext();) {
			String s = (String) it.next();
			// 一层代码对应的内容,二层评级对应list,三层评级内容
			Map<String, Object> dataMap = (Map<String, Object>) map.get(s);
			Set<String> key2 = dataMap.keySet();
			for (Iterator it2 = key2.iterator(); it2.hasNext();) {
				String s2 = (String) it2.next();
				if ("债券公告".equals(s2)) {
					List<DAnnMain> dann = (List<DAnnMain>) dataMap.get(s2);
					for (DAnnMain b : dann) {
						int col = 0;
						row = seq++;
						// 序号
						l = new Label(col++, row, String.valueOf(++num));
						sheet.addCell(l);
						l = new Label(col++, row, b.getAnnTitle());
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getOriCode()));
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getDeclDate()));
						sheet.addCell(l);
						l = new Label(col++, row, b.getStkShortName());
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getStkUniCode()));
						sheet.addCell(l);
						l = new Label(col++, row, "");
						sheet.addCell(l);
					}
				}
				if ("股票公告".equals(s2)) {
					List<DAnnMain> dann = (List<DAnnMain>) dataMap.get(s2);
					for (DAnnMain b : dann) {
						int col = 0;
						row = seq++;
						// 序号
						l = new Label(col++, row, String.valueOf(++num));
						sheet.addCell(l);
						l = new Label(col++, row, b.getAnnTitle());
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getOriCode()));
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getDeclDate()));
						sheet.addCell(l);
						l = new Label(col++, row, b.getStkShortName());
						sheet.addCell(l);
						l = new Label(col++, row, String.valueOf(b.getStkUniCode()));
						sheet.addCell(l);
						l = new Label(col++, row, "");
						sheet.addCell(l);
					}
				}
			}
		}
		// 设置列的宽度
		int column = 0;
		sheet.setColumnView(column++, 20);
		sheet.setColumnView(column++, 80);
		sheet.setColumnView(column++, 30);
		sheet.setColumnView(column++, 40);
		sheet.setColumnView(column++, 30);
		sheet.setColumnView(column++, 30);
		sheet.setColumnView(column++, 50);
		sheet.setColumnView(column++, 20);
		sheet.setColumnView(column++, 20);
		sheet.setColumnView(column++, 80);
		sheet.setColumnView(column++, 20);
		workbook.write();
		workbook.close();
		System.out.println("内容写入成功");
	}
	public static void readExcelInfo(String fileName) throws Exception {// 获得Excel文件多少行多少列
		Workbook book = Workbook.getWorkbook(new File(fileName));// 构造Workbook(工作薄)对象
		Sheet sheet = book.getSheet(0);
		// 得到第一列第一行的单元格// 获得第一个工作表对象
		int columnum = sheet.getColumns(); // 得到列数
		int rownum = sheet.getRows(); // 得到行数
		System.out.println(columnum);
		System.out.println(rownum);
		for (int i = 0; i < rownum; i++) // 循环进行读写
		{
			for (int j = 0; j < columnum; j++) {
				Cell cell1 = sheet.getCell(j, i);
				String result = cell1.getContents();
				System.out.print(result);
				System.out.print(" \t ");
			}
			System.out.println();
		}
		book.close();// 关闭(工作薄)对象
}
文件发送到指定邮箱:以163邮箱为例:
// 发送邮件的邮箱号(若有授权码则密码输入授权码)
	public static String myEmailAccount = "******@163.com";
	public static String myEmailPassword = "****";
	// 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
	// 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
	public static String myEmailSMTPHost = "smtp.163.com";
	// 收件人邮箱
	public static String receiveMailAccount = "***@qq.com";
	public static void main(String[] args) throws Exception {
		sendMessage();
	}
	public static void sendMessage() {
		// 创建参数配置, 用于连接邮件服务器的参数配置
		Properties props = new Properties();
		// 使用的协议(JavaMail规范要求)
		props.setProperty("mail.transport.protocol", "smtp");
		// 发件人的邮箱的 SMTP 服务器地址
		props.setProperty("mail.smtp.host", myEmailSMTPHost);
		// 需要请求认证
		props.setProperty("mail.smtp.auth", "true");
		// PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
		// 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
		/*
		 * // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接, //
		 * 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助, // QQ邮箱的SMTP(SLL)端口为465或587,
		 * 其他邮箱自行去查看) final String smtpPort = "465";
		 * props.setProperty("mail.smtp.port", smtpPort);
		 * props.setProperty("mail.smtp.socketFactory.class",
		 * "javax.net.ssl.SSLSocketFactory");
		 * props.setProperty("mail.smtp.socketFactory.fallback", "false");
		 * props.setProperty("mail.smtp.socketFactory.port", smtpPort);
		 */
		// 根据配置创建会话对象, 用于和邮件服务器交互
		Session session = Session.getDefaultInstance(props);
		session.setDebug(true); // 设置为debug模式, 可以查看详细的发送 log
		// 创建邮件
		MimeMessage message;
		try {
			message = createMimeMessage(session, myEmailAccount, receiveMailAccount);
			// 根据 Session 获取邮件传输对象
			Transport transport = session.getTransport();
			/*
			 * 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错 PS_02:
			 * 连接失败的原因通常为以下几点, 仔细检查代码: (1) 邮箱没有开启 SMTP 服务; (2) 邮箱密码错误,
			 * 例如某些邮箱开启了独立密码; (3) 邮箱服务器要求必须要使用 SSL 安全连接; (4) 请求过于频繁或其他原因,
			 * 被邮件服务器拒绝服务; (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
			 */
			transport.connect(myEmailAccount, myEmailPassword);
			//发送邮件
			transport.sendMessage(message, message.getAllRecipients());
			//关闭连接
			transport.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	/**
	 * 创建一封只包含文本的简单邮件
	 * @param session
	 *            和服务器交互的会话
	 * @param sendMail
	 *            发件人邮箱
	 * @param receiveMail
	 *            收件人邮箱
	 * @return
	 * @throws Exception
	 */
	public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail) throws Exception {
		// 创建邮件
		MimeMessage message = new MimeMessage(session);
		// From: 发件人
		message.setFrom(new InternetAddress(sendMail, "标题内容", "UTF-8"));
		// To: 收件人
		message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "某用户", "UTF-8"));
		// Subject: 邮件主题
		message.setSubject("主題是", "UTF-8");
		/*
		 * Content: 邮件正文(可以使用html标签) message.setContent(
		 * "这里是正文内容", "text/html;charset=UTF-8");
		 */
		// 创建消息部分
		BodyPart messageBodyPart = new MimeBodyPart();
		// 正文消息消息
		messageBodyPart.setText("正文");
		// 创建多重消息
		Multipart multipart = new MimeMultipart();
		// 设置文本消息部分
		multipart.addBodyPart(messageBodyPart);
		// 附件部分
		messageBodyPart = new MimeBodyPart();
		// 文件本地地址
		String filename = "C:/Users/Administrator/Desktop/gp.xlsx";
		DataSource source = new FileDataSource(filename);
		messageBodyPart.setDataHandler(new DataHandler(source));
		messageBodyPart.setFileName(filename);
		multipart.addBodyPart(messageBodyPart);
		// 发送完整消息
		message.setContent(multipart);
		//设置发件时间
		message.setSentDate(new Date());
		//保存设置
		message.saveChanges();
		return message;
	}
                    
                
                
            
        
浙公网安备 33010602011771号