質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.03%

データ(Excelベース)の自動入力

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 1,216

score 88

お世話になってます。
実は、今Excelベースで作成したデータをあるDBにWeb上から
データを自動入力するというものを作成しています。
Javaを初めて早数週間ですが、以下のようなレベルのものしか
作成できませんでした。
Java玄人から見て以下のコードで、この辺が甘いとか
これは酷いと思う点をお聞かせ頂けないでしょうか?
今後、削除や更新版を作成予定の為、参考にしたいと考えます。
以上、宜しくお願いします。
(以下のものは一応動作します)

◎元データ(Excelベース)
イメージ説明

◎操作したいWeb画面1
イメージ説明
◎操作したいWeb画面2
イメージ説明
◎操作したいWeb画面3
イメージ説明
◎操作したいWeb画面4
イメージ説明

★尚、赤字が入力したいデータ及び押したいボタン等

◎Web操作側(SampleTest.java)

package Selenium_Test;

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.exec.util.StringUtils;
import org.openqa.selenium.By;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.WebElement;
import org.openqa.selenium.chrome.ChromeDriver;
import org.openqa.selenium.support.ui.Select; 

public class SampleTest {    

    @SuppressWarnings("unchecked")
    public static void main(String[] args) throws InterruptedException {      

      System.setProperty("webdriver.chrome.driver", "exe/chromedriver.exe");
      WebDriver driver = new ChromeDriver();
      driver.get("http://aaaaaaaa-chem.co.jp/?NextUrl=http://scms000027.aaaaaaa.co.jp/KeikouMstMenu/Menuhttpget");
      Thread.sleep(2000);  //Let the user actually see something!
      WebElement pass_id = driver.findElement(By.name("UserID"));
      pass_id.sendKeys("u0002000");

      WebElement pass_word = driver.findElement(By.name("Password"));
      pass_word.sendKeys("****706");
      pass_word.submit();
      List<WebElement> elems = driver.findElements(By.tagName("input"));          
      elems.get(0).submit();

      //ReadExcelクラスのインスタンス生成
      ReadExcel nitta = new ReadExcel();
      List<String> my_data = new ArrayList<String>(nitta.Newenter());        
      int my_cnt = my_data.size();
      for (int i = 0; i < my_data.size(); i++) {

              int my_num = i%6;              
              switch (my_num) {
              case 0:
                  String itemcode = my_data.get(i);
                  WebElement elems2 = driver.findElement(By.id("txtShuHinCDSearch"));
                elems2.sendKeys(itemcode);
                driver.findElement(By.xpath("//*[@id=\"btnEdit\"]")).click();
                break;
              case 1:
                  String checkcharactric = my_data.get(i);
                  WebElement elems3 = driver.findElement(By.xpath("//*[@id=\"txtHinKenToku\"]"));
                elems3.sendKeys(checkcharactric);
                Thread.sleep(1000);
                  break;                  
              case 2:                  
                  String itemtext = my_data.get(i);
                  WebElement elems4 = driver.findElement(By.xpath("//*[@id=\"txtHinKenTokuTxt\"]"));
                elems4.sendKeys(itemtext);
                break;                  
              case 3:
                  String jadge = my_data.get(i);                  
                  WebElement elems5 = driver.findElement(By.xpath("//*[@id=\"ddlHanKbn\"]"));
                  if (jadge.equals("08")) {
                Select selection = new Select(elems5);
                selection.selectByValue(jadge);                
                  }else {}                
                  break;                  
              case 4:                  
                  String Lotnum = my_data.get(i);
                  WebElement para1 = driver.findElement(By.xpath("//*[@id=\"txtHanLotSu\"]"));
                  para1.sendKeys(Keys.BACK_SPACE);
                  para1.sendKeys(Keys.BACK_SPACE);
                  para1.sendKeys(Keys.BACK_SPACE);                  
                para1.sendKeys(Lotnum);
                driver.findElement(By.xpath("//*[@id=\"btnUpdateCheck\"]")).click();
                  break;

              case 5:
                  String paranum = my_data.get(i);
                  WebElement para2 = driver.findElement(By.xpath("//*[@id=\"txtParam1\"]"));
                para2 .sendKeys(paranum);
                driver.findElement(By.xpath("//*[@id=\"btnUpdateCheck\"]")).click();
                Thread.sleep(1000);
                driver.findElement(By.xpath("//input[@value='はい']")).click();
                Thread.sleep(2000);  // Let the user actually see something!
                break;                  
              }
              if (my_num == 5 && my_cnt > 6 ) {
                  driver.findElement(By.xpath("//*[@id=\"btnReturn\"]")).click();
                  List<WebElement> elems2 = driver.findElements(By.tagName("input"));          
                elems2.get(0).submit();
              }else {}
        }     
    //driver.quit();     
    }    
}


◎ReadExcel.java 

import java.io.FileInputStream;

import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.Objects;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import java.util.List;

public class ReadExcel {

    private static String INPUT_DIR = "C:\\Users\\u00050239\\Desktop\\Test\\" ;

    private static int my_last;
    private static List<String> list1;
    private static int iw0; 

    public List<String> Newenter() {

        String xlsxFileAddress = this.INPUT_DIR + "セコム.xls";
        //共通インターフェースを扱える、WorkbookFactoryで読み込む
        try {
        Workbook wb = WorkbookFactory.create(new FileInputStream(xlsxFileAddress));
        iw0 = 0;
        for (Sheet sheet : wb ) {
            Sheet sheet2 = wb.getSheetAt(iw0);
            String my_S = sheet2.getSheetName();
            //if (my_S.equals("新規") || my_S.equals("更新") || my_S.equals("削除")) {
            if (my_S.equals("新規")){
                for (Row row : sheet2) {
                    this.my_last  = sheet2.getLastRowNum();
                    int iw2 = 0;
                    List<String> list1 = new ArrayList<String>();
                    for (Cell cell : row) {
                        if (iw2 >= 1 && my_last >= iw2) {                            
                            Row row2 = sheet2.getRow(iw2);
                            //String str1 = null;                            
                            String str1 = row2.getCell(0).getStringCellValue();
                            if (str1  != null) {                                
                            list1.add(row2.getCell(0).getStringCellValue());
                            list1.add(row2.getCell(1).getStringCellValue());
                            list1.add(row2.getCell(2).getStringCellValue());
                            list1.add(row2.getCell(3).getStringCellValue().substring(0,2));
                            list1.add(row2.getCell(4).getStringCellValue());
                            list1.add(BigDecimal.valueOf(row2.getCell(5).getNumericCellValue()).toPlainString());                         
                            }else {}                         
                        }
                    iw2++;
                    }
                    return list1;    
                }                
            }
            iw0++;
        }
        wb.close();
        }catch(Exception e) {}
        return null;    
    }

    public int getlstrw() {
        return this.my_last ;        
    }

}
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

イントラのサイトだと思いますが、インターネット上のWebサービスのサイトでいくらよいと思われるようなUIでもイントラの場合はレガシーなUIの方が好まれる場合もありますので実際に使用される方の意見を聞いたほうがよいのではないかと思います。

プログラムどうのというよりイントラサイトの情報をインターネット上に公開してしまうほうが問題になるのではないかと心配してしまいます。部署名や個人名も出てますし...
心配ならば早めにこの記事を削除したほうが良いかと思います。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/11/28 07:43 編集

    返信ありがとうございます。
    早速、一部修正しました!

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.03%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る