前提
Java初心者です。金融系のプログラムを作成しています。
全部で7クラスあり、
・起動するためのボタンを配置したクラス (StartButton.java)
・メインクラス(Main.java)
・apache.poiを用いてexcelのデータを読み込むクラス(Entry.java)
・お客さんの名前でデータを区別するクラス(Culc.java)
・お客さんの要望通りのフォームでexcel出力するスーパークラス(Output.java)
・お客さんの要望通りのフォームでexcel出力するクラス(顧客名★★.java)
・excelをcsv変換してメール送信をするクラス(Converter.java)
Javaのプログラムについては、Eclipse上でエラーなく実行できることが確認できています。
実現したいこと
エラーなく実行できるようにしたいです。
拡張することも視野に入れていますので、できるだけJavaのコードを変えたくないです。
発生している問題・エラーメッセージ
コマンドプロンプトで動かすと、StartButton画面が出力されますが、
StartButton画面のボタンを押下するとエラーメッセージが出力されてしまいます。
Windows10にコンパイルしたものの、以下エラーが出力されるため、実行するとエラーが出力されてしまいます。
全体は7クラスありますが、エラーを吐き出すのはEntryクラスのため、
StartButton Main Entryまでを記載します。
※プログラムは一部ぼかしています。
C:\Users\****>java -classpath C:\Java作業\test\202207\Create_Confirmation\src\Create_Confirmation\confirmation.jar Create_Confirmation.StartButton Exception in thread "AWT-EventQueue-0" java.lang.NoClassDefFoundError: org/apache/poi/ss/usermodel/Cell at Create_Confirmation.Main.main(Main.java:23) at Create_Confirmation.StartButton$1.actionPerformed(StartButton.java:39) at java.desktop/javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1972)
該当のソースコード
Java
1package Create_Confirmation; 2 3import java.awt.BorderLayout; 4import java.awt.Container; 5import java.awt.event.ActionEvent; 6import java.awt.event.ActionListener; 7 8import javax.swing.JButton; 9import javax.swing.JFrame; 10import javax.swing.JPanel; 11 12class StartButton extends JFrame{ 13 public static void main(String args[]){ 14 StartButton frame = new StartButton("リストメイキング"); 15 frame.setVisible(true); 16 } 17 18 StartButton(String title){ 19 setTitle(title); 20 setBounds(100, 100, 600, 400); 21 setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 22 23 JButton button1 = new JButton("顧客名★★"); 24 25 JPanel p = new JPanel(); 26 p.add(button1); 27 28 Container contentPane = getContentPane(); 29 contentPane.add(p, BorderLayout.CENTER); 30 31 button1.addActionListener(new ActionListener() { 32 @Override 33 public void actionPerformed(ActionEvent e) { 34 String basketID = "顧客名★★"; 35 Main.main(basketID); 36 } 37 }); 38 } 39}
Java
1package Create_Confirmation; 2 3import java.io.File; 4import java.util.ArrayList; 5import java.util.List; 6 7public class Main { 8 9 static List<String[]>listData; 10 11 public static void main(String basketID) { 12 String fileName = null; 13 String csvName = null; 14 15 try { 16 //顧客別 17 String wbName = "【provisional】";//csvのファイル名 18 19 //Confirmationの生成用データの中身 20 List<String[]> listConf = new ArrayList<String[]>(); 21 22 //Entryクラスから呼び出す 23 String stringToday = Entry.DateStringChange(); //日付データ 24 int integerToday = Entry.DateIntegerChange(stringToday); //日付データ 25 int[] sendArray = Entry.DataTodayExchange(integerToday); //日付データ 26 listData= Entry.PPPExchange(basketID); //全データ呼び出し 27 List<String[]>listCommissionData= Entry.DataCommission(basketID); //手数料全データ呼び出し 28 29 //手数料率データ 30 String[] commissionRateStr = Culc.CulcCommission(listCommissionData, basketID); 31 32 //Confirmationの基準データ作成 33 listConf = Culc.PPPAverage(listData, commissionRateStr); 34 if(commissionRateStr[1].equals("1.0")) { 35 listConf.remove(listConf.size()-1); 36 } 37 38 //出力設定 39 switch (basketID) { 40 case "顧客名★★" : 41 if (listConf.size() !=0) { 42 wbName = "顧客名★★"; 43 } 44 fileName = 顧客名★★.PPPWriting(listConf, sendArray,basketID, wbName); 45 break; 46 } 47 48 //ファイル名は例【provisional】_yyyymmddが作成される 49 File inputFile = new File(fileName); 50 csvName = fileName.replace("\\excel\\","\\csv\\"); 51 csvName = csvName.replace(".xlsx",".csv"); 52 File outputFile = new File(csvName); 53 Converter.CSVConvert(inputFile, outputFile); 54 Converter.SendMail(csvName); 55 56 } catch (Exception e) { 57 e.printStackTrace(); 58 System.out.println("処理が失敗しました"); 59 } 60 } 61}
Java
1package Create_Confirmation; 2 3import java.io.FileInputStream; 4import java.text.SimpleDateFormat; 5import java.util.ArrayList; 6import java.util.Date; 7import java.util.List; 8 9import org.apache.poi.hssf.usermodel.HSSFCell; 10import org.apache.poi.hssf.usermodel.HSSFRow; 11import org.apache.poi.hssf.usermodel.HSSFSheet; 12import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 14//Excelファイルを読み込む 15public class Entry { 16 17 static HSSFWorkbook wb; 18 19 //本日日付を文字列に変更する 20 static String DateStringChange() { 21 22 Date today = new Date(); 23 SimpleDateFormat dateForm = new SimpleDateFormat("yyyyMMdd"); 24 String stringToday = dateForm.format(today); 25 return stringToday; 26 } 27 28 //本日日付を数値に変更する 29 static int DateIntegerChange(String stringToday) { 30 int integerToday = Integer.valueOf(stringToday); 31 return integerToday; 32 } 33 //1営業日前のデータを抽出する 34 public static int[] DataTodayExchange(int integerToday ) { 35 36 int[] sendArray = new int[6]; 37 38 try { 39 wb = new HSSFWorkbook(new FileInputStream("\\\\社内サーバ\\社内サーバA\\フォルダ名\\営業日.xls")); 40 HSSFSheet sheet = wb.getSheet("シート名◎◎"); 41 HSSFRow row = null;//行 42 HSSFCell cell = null;//列 43 int day; 44 45 //行ごとの値 46 for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); ) { 47 row = sheet.getRow(rowIndex); 48 int[] arrayArg = new int[6]; 49 //列ごとの値 50 for(int columnIndex = 0; columnIndex<= arrayArg.length-1 ;columnIndex++) { 51 52 cell = row.getCell(columnIndex); 53 day = (int) cell.getNumericCellValue(); 54 arrayArg[columnIndex] = day; 55 } 56 if(arrayArg[0]==integerToday){ 57 58 for(int i = 0; i<= sendArray.length-1; i++) { 59 sendArray[i] = arrayArg[i]; 60 } 61 } 62 rowIndex = rowIndex +1; 63 } 64 65 } catch (Exception e) { 66 e.printStackTrace(); 67 System.out.println("処理が失敗しました"); 68 } 69 return sendArray; 70 } 71 //手数料のデータを抽出する 72 public static List<String[]> DataCommission(String bascketID) { 73 74 List<String[]>listData = new ArrayList<String[]>(); 75 try { 76 wb = new HSSFWorkbook(new FileInputStream("\\\\社内サーバ\\社内サーバA\\フォルダ名\\お客さん.xls")); 77 HSSFSheet sheet = wb.getSheet("シート名△△"); 78 HSSFRow row = sheet.getRow(0);//行 79 HSSFCell cell = row.getCell((short) 1);//列 80 String data_Commission; 81 82 for (int rowIndex = 1; rowIndex <= sheet.getLastRowNum();) { 83 84 row = sheet.getRow(rowIndex); 85 String[] arrayArg = new String[12]; 86 87 for(int columnIndex = 0; columnIndex <= arrayArg.length-1;) { 88 89 cell = row.getCell(columnIndex); 90 91 Object data = Culc.getCellValue(cell); 92 data_Commission = String.valueOf(data); 93 //バスケットIDの修正 94 if (data_Commission.contains("顧客名★")) { 95 data_Commission = "顧客名★★"; 96 } 97 arrayArg[columnIndex] = data_Commission; 98 99 columnIndex = columnIndex+1; 100 } 101 102 if(arrayArg[2].contains(bascketID)) { 103 listData.add(arrayArg); 104 } 105 rowIndex = rowIndex+1; 106 } 107 108 } catch (Exception e) { 109 e.printStackTrace(); 110 System.out.println("処理が失敗しました"); 111 } 112 return listData; 113 } 114 115 //夜間のデータファイル読み込み 116 public static List<String[]> PPPExchange(String bascketID) { 117 118 List<String[]>listData = new ArrayList<String[]>(); 119 120 try { 121 wb = new HSSFWorkbook(new FileInputStream("\\\\社内サーバ\\社内サーバA\\フォルダ名\\PPP.xls")); 122 HSSFSheet sheet = wb.getSheet("Sheet1"); 123 HSSFRow row = sheet.getRow(0);//行 124 HSSFCell cell = row.getCell((short) 1);//列 125 String data_PPP; 126 127 for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) { 128 row = sheet.getRow(rowIndex); 129 String[] arrayArg = new String[23]; 130 131 for(int columnIndex = 0; columnIndex <= arrayArg.length-2;) { 132 133 cell = row.getCell(columnIndex); 134 135 Object data = Culc.getCellValue(cell); 136 data_PPP = String.valueOf(data); 137 138 //小数点がない場合の処理 小数点以下を消す 139 if (data_PPP.contains(".0")){ 140 data_PPP = data_PPP.replace(".0", ""); 141 } 142 //顧客名★★のバスケットID対応 143 if(data_PPP.equals("顧客名★★1")) { 144 data_PPP = "顧客名★★1"; 145 }else if (data_PPP.equals("顧客名★★2")) { 146 data_PPP = "顧客名★★2"; 147 }else if (data_PPP.equals("顧客名★★3")) { 148 data_PPP = "顧客名★★3"; 149 }else if (data_PPP.equals("顧客名★★4")) { 150 data_PPP = "顧客名★★4"; 151 } 152 arrayArg[columnIndex] = data_PPP; 153 columnIndex = columnIndex+1; 154 } 155 arrayArg[22] = "PPP"; 156 if(arrayArg[11].contains(bascketID)) { 157 listData.add(arrayArg); 158 } 159 } 160 } catch (Exception e) { 161 e.printStackTrace(); 162 System.out.println("処理が失敗しました"); 163 } 164 return listData; 165 } 166 167 } 168}
試したこと
Eclipse上でjarファイルを作成し、コンパイルまで実行しました。
classpathは設定済みです。
補足情報(FW/ツールのバージョンなど)
Windows10
Java 8
Apache.poi 5-2-2 使用
回答2件
あなたの回答
tips
プレビュー