 0825e505be
			
		
	
	0825e505be
	
	
	
		
			
			Yes24 추가. ㄴ> yes24에서 요구하는 양식에 맞춰 엑셀로 반출해주는 기능 추가. ㄴ> 추후 본프로그램 이식예정. =====* unimarc *===== == TODO == 기타 추가적인 버그 잡을것. / 바로빌 세금계산서알아볼것. ===== 작업중 ===== 마크 반입 폼 완료 마크 반출 폼 작업중 ㄴ> 작업중 다문화 옮기는 도중 클립보드에서 일어나는 오류 잡아내는중. ===== 보류 ===== b. 마크목록 폼 작성중 1. 엑셀반출 기능 추가중 사용 작업대기중 c. 마크 반입 폼 수정중 1. 불러오기는 되나 저장 기능이 필요함. ===== 완료 ===== 21.06.21 마크검색 작업완료 마크 편집창에서 메모장, 미리보기, 표지크게보기 기능 추가 21.06.08 자동업데이트 기능 완료 - 프로젝트가 새로 바뀜. 1. 주문관리 팩스연동 완료 2. 전송된 팩스 확인 작업개시, 이메일 전송모듈 수정완료. 3. 주문관리에서 주문처와 목록 검색하는 폼 검색 모듈도 재수정 완료함. 4. 데이터베이스 내 이미지URL을 가져오는작업 완료 목록집계 폼 재 수정작업 완료 - 확인 및 수정 필요. ISBN 체크 프로그램 => 본프로그램에 이식중. ㄴ> 코드는 다 옮겼으나 기존 사용하던 방식과 조금 달라서 버그발생 가능성 있음. ㄴ> 버그 체크 계속 해볼것. 21-04-15 ㄴ> 21_04_20 버그 없음. 2. 마크편집 폼 수정 중 (마크 반출 test프로젝트 진행완료, 본 프로젝트에 적용중. / 저장기능활성화 작업완료) 2-1. 기존의 칸채우기에서 예상되지 못한 버그가 발생하여 칸채우기 숨김. 2-2. 008태크 재배치 => TextBox에 적용완료. 변경사항 메모장으로 넘기는 작업 완료. 2-3. 저장기능 완료. (04.14 체크해볼것 - 완료) 주문관리 작업중 (DataGridView 주문처 엔터키 입력시 검색되게끔 하는 코드작성중) - 21.04.27 완료
		
			
				
	
	
		
			404 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
			
		
		
	
	
			404 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			C#
		
	
	
	
	
	
| using Newtonsoft.Json;
 | |
| using System;
 | |
| using System.Collections.Generic;
 | |
| using System.Drawing;
 | |
| using System.IO;
 | |
| using System.Linq;
 | |
| using System.Net;
 | |
| using System.Text;
 | |
| using System.Threading.Tasks;
 | |
| using System.Web.Script.Serialization;
 | |
| using System.Windows.Forms;
 | |
| using System.Xml;
 | |
| 
 | |
| namespace ISBN_Check_test
 | |
| {
 | |
|     class API
 | |
|     {
 | |
|         /// <summary>
 | |
|         /// https://blog.aladin.co.kr/openapi 참고
 | |
|         /// </summary>
 | |
|         /// <param name="Query"></param>
 | |
|         /// <param name="QueryType"></param>
 | |
|         /// <param name="Param"></param>
 | |
|         /// <returns></returns>
 | |
|         public string Aladin(string Query, string QueryType, string[] Param)
 | |
|         {
 | |
|             string result = string.Empty;
 | |
|             // 쿼리 생성
 | |
|             string key = "ttbgloriabook1512001";
 | |
|             string site = "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx";
 | |
|             string query = string.Format("{0}?query={1}&TTBKey={2}&output=xml&querytype={3}&MaxResults={4}",
 | |
|                 site, Query, key, QueryType, 30.ToString());
 | |
| 
 | |
|             // 쿼리를 입력인자로 WebRequest 개채 생성
 | |
|             WebRequest request = WebRequest.Create(query);
 | |
| 
 | |
|             // WebRequest개체의 헤더에 인증키 포함시키기.
 | |
|             // request.Headers.Add("Authorization", header);
 | |
| 
 | |
|             // WebResponse개체를 통해 서비스 요청.
 | |
|             WebResponse response = request.GetResponse();
 | |
| 
 | |
|             // 결과문자열 확인
 | |
|             Stream stream = response.GetResponseStream();
 | |
|             StreamReader reader = new StreamReader(stream, Encoding.UTF8);
 | |
|             String xml = reader.ReadToEnd();
 | |
|             stream.Close();
 | |
| 
 | |
|             return xml;
 | |
|             // xml형식을 json형식으로 변환
 | |
|             XmlDocument doc = new XmlDocument();
 | |
|             doc.LoadXml(xml);
 | |
|             var json = JsonConvert.SerializeXmlNode(doc);
 | |
| 
 | |
|             // json형식 분석을 위해 JavaScriptSerializer 개체 생성
 | |
|             JavaScriptSerializer js = new JavaScriptSerializer();
 | |
| 
 | |
|             // 런타임에 개체를 확인하여 사용할수 있는 dynamic을 이용해 역직렬화
 | |
|             dynamic dob = js.Deserialize<dynamic>(json);
 | |
| 
 | |
|             // "object"내에 있는것을 얻어오기 위해 다시 dynamic변수에 참조
 | |
|             dynamic docs = "";
 | |
|             try
 | |
|             {
 | |
|                 docs = dob["object"]["item"];
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 return "";
 | |
|             }
 | |
|             int length = 0;
 | |
|             int ID_length = Param.Length;
 | |
| 
 | |
|             // 검색 결과가 1개 이하일 경우, 오류가 발생하여 try/catch문 사용.
 | |
|             try
 | |
|             {
 | |
|                 // docs는 요소 컬렉션으로 object로 변환.
 | |
|                 object[] buf = docs;
 | |
|                 length = buf.Length;
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 object buf = docs;
 | |
|                 length = 1;
 | |
|             }
 | |
|             for (int a = 0; a < length; a++)
 | |
|             {
 | |
|                 List<string> tmp_data = new List<string>();
 | |
|                 for (int b = 0; b < ID_length; b++)
 | |
|                 {
 | |
|                     if (length == 1)
 | |
|                     {
 | |
|                         tmp_data.Add(docs[Param[b]]);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         tmp_data.Add(docs[a][Param[b]]);
 | |
|                     }
 | |
|                     result += tmp_data[b] + "|";
 | |
|                 }
 | |
|                 result += "\n";
 | |
|             }
 | |
|             return result;
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// https://blog.aladin.co.kr/openapi 참고
 | |
|         /// </summary>
 | |
|         /// <param name="Query">ISBN값</param>
 | |
|         /// <param name="QueryType">"ISBN"고정</param>
 | |
|         /// <param name="Param">가져올 데이터</param>
 | |
|         /// <returns></returns>
 | |
|         public string Aladin_lookup(string Query, string QueryType, string[] Param)
 | |
|         {
 | |
|             string result = string.Empty;
 | |
|             // 쿼리 생성
 | |
|             string key = "ttbgloriabook1512001";
 | |
|             string site = "http://www.aladin.co.kr/ttb/api/ItemLookUp.aspx";
 | |
|             string query = string.Format("{0}?TTBKey={1}&itemIdType={2}&ItemId={3}&OptResult=categoryIdList",
 | |
|                 site, key, QueryType, Query);
 | |
| 
 | |
|             // 쿼리를 입력인자로 WebRequest 개채 생성
 | |
|             WebRequest request = WebRequest.Create(query);
 | |
| 
 | |
|             // WebRequest개체의 헤더에 인증키 포함시키기.
 | |
|             // request.Headers.Add("Authorization", header);
 | |
| 
 | |
|             // WebResponse개체를 통해 서비스 요청.
 | |
|             WebResponse response = request.GetResponse();
 | |
| 
 | |
|             // 결과문자열 확인
 | |
|             Stream stream = response.GetResponseStream();
 | |
|             StreamReader reader = new StreamReader(stream, Encoding.UTF8);
 | |
|             String xml = reader.ReadToEnd();
 | |
|             stream.Close();
 | |
|             // xml형식을 json형식으로 변환
 | |
|             XmlDocument doc = new XmlDocument();
 | |
|             doc.LoadXml(xml);
 | |
|             var json = JsonConvert.SerializeXmlNode(doc);
 | |
|             // return json;
 | |
| 
 | |
|             // json형식 분석을 위해 JavaScriptSerializer 개체 생성
 | |
|             JavaScriptSerializer js = new JavaScriptSerializer();
 | |
| 
 | |
|             // 런타임에 개체를 확인하여 사용할수 있는 dynamic을 이용해 역직렬화
 | |
|             dynamic dob = js.Deserialize<dynamic>(json);
 | |
| 
 | |
|             // "object"내에 있는것을 얻어오기 위해 다시 dynamic변수에 참조
 | |
|             dynamic docs = "";
 | |
|             try
 | |
|             {
 | |
|                 docs = dob["object"]["item"];
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 return "";
 | |
|             }
 | |
|             int length = 0;
 | |
|             int ID_length = Param.Length;
 | |
| 
 | |
|             // 검색 결과가 1개 이하일 경우, 오류가 발생하여 try/catch문 사용.
 | |
|             try
 | |
|             {
 | |
|                 // docs는 요소 컬렉션으로 object로 변환.
 | |
|                 object[] buf = docs;
 | |
|                 length = buf.Length;
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 object buf = docs;
 | |
|                 length = 1;
 | |
|             }
 | |
|             for (int a = 0; a < length; a++)
 | |
|             {
 | |
|                 List<string> tmp_data = new List<string>();
 | |
|                 for (int b = 0; b < ID_length; b++)
 | |
|                 {
 | |
|                     if (length == 1)
 | |
|                     {
 | |
|                         tmp_data.Add(docs[Param[b]]);
 | |
|                     }
 | |
|                     else
 | |
|                     {
 | |
|                         tmp_data.Add(docs[a][Param[b]]);
 | |
|                     }
 | |
|                     result += tmp_data[b] + "|";
 | |
|                 }
 | |
|                 result += "\n";
 | |
|             }
 | |
|             return result;
 | |
|         }
 | |
|         public string Naver(string[] Query, string[] QueryType, string[] Param)
 | |
|         {
 | |
|             string result = string.Empty;
 | |
|             string json = string.Empty;
 | |
|             // url 생성
 | |
|             string url = "https://openapi.naver.com/v1/search/book_adv?";
 | |
| 
 | |
|             for(int a = 0; a < Query.Length; a++)
 | |
|             {
 | |
|                 url += string.Format("{0}={1}&", QueryType[a], Query[a]);
 | |
|             }
 | |
|             HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
 | |
| 
 | |
|             request.Headers.Add("X-Naver-Client-Id", "wYr0JczCBoDopq1NKTyQ");   // 클라이언트 아이디
 | |
|             request.Headers.Add("X-Naver-Client-Secret", "QHzeXadtO7");         // 클라이언트 시크릿
 | |
|             HttpWebResponse response = (HttpWebResponse)request.GetResponse();
 | |
|             string status = response.StatusCode.ToString();
 | |
|             if (status == "OK")
 | |
|             {
 | |
|                 Stream stream = response.GetResponseStream();
 | |
|                 StreamReader reader = new StreamReader(stream, Encoding.UTF8);
 | |
|                 json = reader.ReadToEnd();
 | |
|             }
 | |
|             else
 | |
|             {
 | |
|                 MessageBox.Show(status, "Error");
 | |
|                 return "Error";
 | |
|             }
 | |
| 
 | |
|             // json형식 분석을 위해 JavaScriptSerializer 개체 생성
 | |
|             JavaScriptSerializer js = new JavaScriptSerializer();
 | |
| 
 | |
|             // 런타임에 개체를 확인하여 사용할수 있는 dynamic을 이용해 역직렬화
 | |
|             dynamic dob = js.Deserialize<dynamic>(json);
 | |
| 
 | |
|             // "object"내에 있는것을 얻어오기 위해 다시 dynamic변수에 참조
 | |
|             dynamic docs = "";
 | |
|             try
 | |
|             {
 | |
|                 // docs = dob["object"]["item"];
 | |
|                 docs = dob["items"];
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 return "";
 | |
|             }
 | |
|             int length = 0;
 | |
|             int ID_length = Param.Length;
 | |
| 
 | |
|             // 검색 결과가 1개 이하일 경우, 오류가 발생하여 try/catch문 사용.
 | |
|             try
 | |
|             {
 | |
|                 // docs는 요소 컬렉션으로 object로 변환.
 | |
|                 object[] buf = docs;
 | |
|                 length = buf.Length;
 | |
|             }
 | |
|             catch
 | |
|             {
 | |
|                 object buf = docs;
 | |
|                 length = 1;
 | |
|             }
 | |
|             for (int a = 0; a < length; a++)
 | |
|             {
 | |
|                 List<string> tmp_data = new List<string>();
 | |
|                 for (int b = 0; b < ID_length; b++)
 | |
|                 {
 | |
|                     tmp_data.Add(docs[a][Param[b]]);
 | |
|                     result += tmp_data[b] + "|";
 | |
|                 }
 | |
|                 result += "\n\t";
 | |
|             }
 | |
|             return result;
 | |
|         }
 | |
|         public string Daum(string Query, string Type, string[] Param)
 | |
|         {
 | |
|             string result = string.Empty;
 | |
| 
 | |
|             // url생성
 | |
|             string url = "https://dapi.kakao.com/v3/search/book";
 | |
|             string query = string.Format("{0}?query={1}&target={2}&", url, Query, Type);
 | |
|             WebRequest request = WebRequest.Create(query);
 | |
| 
 | |
|             string header = "KakaoAK e3935565b731a2a6f32880c90d76403a";
 | |
| 
 | |
|             request.Headers.Add("Authorization", header);
 | |
| 
 | |
|             WebResponse response = request.GetResponse();
 | |
|             Stream stream = response.GetResponseStream();
 | |
|             StreamReader reader = new StreamReader(stream, Encoding.UTF8);
 | |
|             string json = reader.ReadToEnd();
 | |
|             stream.Close();
 | |
|             
 | |
|             JavaScriptSerializer js = new JavaScriptSerializer();
 | |
|             dynamic dob = js.Deserialize<dynamic>(json);
 | |
|             dynamic docs = dob["documents"];
 | |
|             object[] buf = docs;
 | |
| 
 | |
|             int length = buf.Length;
 | |
|             int ID_length = Param.Length;
 | |
| 
 | |
|             for(int a = 0; a < length; a++)
 | |
|             {
 | |
|                 List<object> tmp_data = new List<object>();
 | |
|                 for(int b = 0; b < ID_length; b++)
 | |
|                 {
 | |
|                     if (Param[b] == "authors") {
 | |
|                         object[] tmp = docs[a][Param[b]];
 | |
|                         string tmp_str = string.Empty;
 | |
|                         for(int j = 0; j < tmp.Length; j++)
 | |
|                         {
 | |
|                             tmp_str += tmp[j];
 | |
|                             if (j < tmp.Length - 1) {
 | |
|                                 tmp_str += ", ";
 | |
|                             }
 | |
|                         }
 | |
|                         tmp_data.Add(tmp_str);
 | |
|                         result += tmp_data[b] + "|";
 | |
|                         tmp_str = "";
 | |
|                     }
 | |
|                     else {
 | |
|                         tmp_data.Add(docs[a][Param[b]]);
 | |
|                         result += tmp_data[b] + "|";
 | |
|                     }
 | |
|                 }
 | |
|                 result += "\n";
 | |
|             }
 | |
|             return result;
 | |
|         }
 | |
|     }
 | |
|     class Skill_Grid
 | |
|     {
 | |
| 
 | |
|         /// <summary>
 | |
|         /// 그리드 앞 머리말에 넘버를 표시
 | |
|         /// </summary>
 | |
|         /// <param name="sender"></param>
 | |
|         /// <param name="e"></param>
 | |
|         public void Print_Grid_Num(Object sender, DataGridViewRowPostPaintEventArgs e)
 | |
|         {
 | |
|             // RowPostPaint 이벤트 핸들러
 | |
|             // 행헤더 열영역에 행번호를 위해 장방형으로 처리
 | |
| 
 | |
|             Rectangle rect = new Rectangle(e.RowBounds.Location.X,
 | |
|                                            e.RowBounds.Location.Y,
 | |
|                                            ((DataGridView)sender).RowHeadersWidth - 4,
 | |
|                                            e.RowBounds.Height);
 | |
|             // 위에서 생성된 장방형내에 행번호를 보여주고 폰트색상 및 배경을 설정
 | |
|             TextRenderer.DrawText(e.Graphics,
 | |
|                                   (e.RowIndex + 1).ToString(),
 | |
|                                   ((DataGridView)sender).RowHeadersDefaultCellStyle.Font,
 | |
|                                   rect,
 | |
|                                   ((DataGridView)sender).RowHeadersDefaultCellStyle.ForeColor,
 | |
|                                   TextFormatFlags.VerticalCenter | TextFormatFlags.Right);
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// DataGirdView의 활성화된 셀값을 삭제하는 코드 (단, KeyDown에 넣어야함!!!!)
 | |
|         /// 사전에 if(e.KeyCode == Keys.Delete)안에 들어가야함.
 | |
|         /// </summary>
 | |
|         /// <param name="sender">KeyDown의 object "sender"</param>
 | |
|         /// <param name="e">KeyDown의 KeyEventArgs "e"</param>
 | |
|         public void DataGrid_to_Delete(object sender, KeyEventArgs e)
 | |
|         {
 | |
|             int rowIndex = ((DataGridView)sender).CurrentCell.RowIndex;
 | |
|             int columnIndex = ((DataGridView)sender).CurrentCell.ColumnIndex;
 | |
|             ((DataGridView)sender).Rows[rowIndex].Cells[columnIndex].Value = "";
 | |
|         }
 | |
|         /// <summary>
 | |
|         /// 엑셀에서 복사한 데이터를 DataGirdView에 붙여넣어주는 코드 (단, KeyDown에 넣어야함!!!!)
 | |
|         /// 사전에 if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))안에 들어가야함.
 | |
|         /// </summary>
 | |
|         /// <param name="sender">KeyDown의 object "sender"</param>
 | |
|         /// <param name="e">KeyDown의 KeyEventArgs "e"</param>
 | |
|         public void Excel_to_DataGridView(object sender, KeyEventArgs e)
 | |
|         {
 | |
|             //if user clicked Shift+Ins or Ctrl+V (paste from clipboard)
 | |
|             if ((e.Shift && e.KeyCode == Keys.Insert) || (e.Control && e.KeyCode == Keys.V))
 | |
|             {
 | |
|                 char[] rowSplitter = { '\r', '\n' };
 | |
|                 char[] columnSplitter = { '\t' };
 | |
| 
 | |
|                 //get the text from clipboard
 | |
|                 IDataObject dataInClipboard = Clipboard.GetDataObject();
 | |
| 
 | |
|                 string stringInClipboard = (string)dataInClipboard.GetData(DataFormats.Text);
 | |
|                 //split it into lines
 | |
|                 string[] rowsInClipboard = stringInClipboard.Split(rowSplitter, StringSplitOptions.RemoveEmptyEntries);
 | |
|                 //get the row and column of selected cell in dataGridView1
 | |
|                 int r = ((DataGridView)sender).SelectedCells[0].RowIndex;
 | |
|                 int c = ((DataGridView)sender).SelectedCells[0].ColumnIndex;
 | |
|                 //add rows into dataGridView1 to fit clipboard lines
 | |
|                 if (((DataGridView)sender).Rows.Count < (r + rowsInClipboard.Length))
 | |
|                 {
 | |
|                     ((DataGridView)sender).Rows.Add(r + rowsInClipboard.Length - ((DataGridView)sender).Rows.Count);
 | |
|                 }
 | |
|                 // loop through the lines, split them into cells and place the values in the corresponding cell.
 | |
|                 for (int iRow = 0; iRow < rowsInClipboard.Length; iRow++)
 | |
|                 {
 | |
|                     //split row into cell values
 | |
|                     string[] valuesInRow = rowsInClipboard[iRow].Split(columnSplitter);
 | |
|                     //cycle through cell values
 | |
|                     for (int iCol = 0; iCol < valuesInRow.Length; iCol++)
 | |
|                     {
 | |
|                         //assign cell value, only if it within columns of the dataGridView1
 | |
|                         if (((DataGridView)sender).ColumnCount - 1 >= c + iCol)
 | |
|                         {
 | |
|                             ((DataGridView)sender).Rows[r + iRow].Cells[c + iCol].Value = valuesInRow[iCol];
 | |
|                         }
 | |
|                     }
 | |
|                 }
 | |
|             }
 | |
|         }
 | |
|     }
 | |
| }
 |