천객만래 [千客萬來] (It has an interminable succession of visitors)


업로드 이미지 미리보기양식






- onfocus : 포커스가 위치할 시 이벤트가 수행됩니다.
- onblur : 포커스가 해제되면 이벤트가 수행됩니다.


----------------------------------------------------------------------------------------



<html>
<script language="JavaScript">
<!--



function in_photo() {
var frm = document.frm1;

if (frm.photo1.value)

/* 업로드양식의 이미지경로를 이미지뷰어창에 할당합니다. */
  document.img1.src = frm.photo1.value;  

}


-->
</script>



<body>
<center>



<form method="post" name="frm1">
<table border=1 cellpadding=1 cellspacing=0>
<tr>
  <td align="center" bgcolor="#d5d3d5">[이미지]</td>
  <td>
   <input type="file" name="photo1" size=25

/* 포커스가 위치하면 이벤트가 수행됩니다. */
onfocus="this.style.backgroundColor='#f0f0e0'; in_photo()"

onblur="this.style.backgroundColor='#e0e0e0'">  <!-- 포커스가 해제되면 이벤트가 수행됩니다. -->
  </td>
</tr>
<tr>
  <td colspan=2 align="center">

   <br><font size=2>- 미리보기를 할 수 있습니다. -</font><br><br>

   <img src="" name="img1" align="absmiddle">

  </td>
</tr>
</table>

</form>


</center>
</body>
</html>



출처: 인터넷

Posted by SB패밀리

엑셀 파일 다운로드/업로드(소스)

//  프로그램설명 : DB Table 데이터를 엑셀로 저장하여 다운로드 받을 수 있도록 하거나,


//  엑셀의 데이터를 DB Table로 업로드할 수 있는 클래스


//  단, Excel 프로그램이 설치되어있어야 동작 가능함. SqlHelper 부분은 별도로 추가하셔야 합니다.

// 주석을 자세히 달았으므로 이해하는데는 문제가 없으실 겁니다.


 

using System;
using System.IO;
using System.Data;
using System.Reflection;
using Excel=Microsoft.Office.Interop.Excel;
using System.Collections;
using System.Web;
using System.Web.UI;
using System.Data.OleDb;
using System.Data.SqlClient;

namespace Utilities
{
    ///


    /// DataTable을 입력 데이타로 받아서 해당 데이타로 새로운 엑셀 파일을 만들며
    /// 3가지 유형의 함수를 현재 제공하고 있다.
    /// 향후에는 ADO.NET 처리를 하는 부분과 엑셀 파일에 컬럼명이 추가되도록 할 예정이다.
    /// DB Table 데이터를 엑셀로 저장하여 다운로드 받을 수 있도록 하거나,
    /// 엑셀의 데이터를 DB Table로 업로드할 수 있는 클래스
    /// 단, Excel 2003 혹은 최소 XP 프로그램이 설치되어있어야 동작 가능함.
    ///

    public class ExcelHandler
    {
        ///
        /// 임시 생성 엑셀파일 목록 관리
        ///

        private static ArrayList exportedFiles = new ArrayList();
        ///
        /// 임시 파일 삭제 주기(분 단위)
        ///

        private static int deleteMinutePeriod = 30;

        ///


        /// 임시 엑셀 파일 삭제 주기 설정한다.
        /// 단위는 분단위임. 설정하지 않을 시에는 기본 값이 30분이다.
        /// 30분간만의 임시 파일만 유지한다.
        ///

        public static int DeletePeriodMinute
        {
            set
            {
                deleteMinutePeriod = value;
            }
            get
            {
                return deleteMinutePeriod;
            }
        }

        ///


        /// 생성자
        ///

        public ExcelHandler()
        {
        }

        #region 새로운 엑셀 파일 생성 유형
        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 새로운
        /// 엑셀 파일을 만든다.
        /// 저장된 엑셀 파일을 다운로드하지 않는다.
        /// 1번째 행과 1번째 열부터 저장한다.
        ///

        /// 입력 데이타(DataTable)
        /// 저장 경로명과 파일명
        /// 저장 성공 여부
        public static bool ExportNewFile(DataTable dt, string savedFile)
        {
            return PExportNewFile(dt, savedFile, 1, 1, null);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 새로운
        /// 엑셀 파일을 만든다.
        /// 저장된 엑셀 파일을 다운로드하지 않는다.
        /// 1번째 행과 1번째 열부터 저장한다.
        /// 저장된 엑셀 파일을 다운로드한다.
        ///

        /// 입력 데이타(DataTable)
        /// 저장 경로명과 파일명
        /// 다운로드될 페이지
        /// 저장 성공 여부
        public static bool ExportNewFile(DataTable dt, string savedFile, Page downloadPage)
        {
            return PExportNewFile(dt, savedFile, 1, 1, downloadPage);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 새로운
        /// 엑셀 파일을 만든다.
        /// 저장된 엑셀 파일을 다운로드하지 않는다.
        ///

        /// 입력 데이타(DataTable)
        /// 저장 경로명과 파일명
        /// 엑셀에서 데이타 시작행
        /// 엑셀에서 데이타 시작열
        /// 저장 성공 여부
        public static bool ExportNewFile(DataTable dt, string SavedFile, int row, int col)
        {
            return PExportNewFile(dt, SavedFile, row, col, null);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 새로운
        /// 엑셀 파일을 만든다.
        /// 저장된 엑셀 파일을 다운로드한다.
        ///

        /// 입력 데이타(DataTable)
        /// 저장 경로명과 파일명
        /// 엑셀에서 데이타 시작행
        /// 엑셀에서 데이타 시작열
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        public static bool ExportNewFile(DataTable dt, string SavedFile, int row, int col, Page downloadPage)
        {
            return PExportNewFile(dt, SavedFile, row, col, downloadPage);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 새로운
        /// 엑셀 파일을 만든다.
        ///

        /// 입력 데이타(DataTable)
        /// 저장 경로명과 파일명
        /// 엑셀에서 데이타 시작행
        /// 엑셀에서 데이타 시작열
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        private static bool PExportNewFile(DataTable dt, string SavedFile, int row, int col, Page downloadPage)
        {
            try
            {
                DeleteTemporaryFiles();

                GC.Collect();// clean up any other excel guys hangin'' around...
                Excel.Application excelApp = new Excel.Application();
                // excelApp.Visible = true;
                Excel.Workbook excelWorkbook = excelApp.Workbooks.Add(Type.Missing);
                Excel.Sheets excelSheets = excelWorkbook.Worksheets;
                string currentSheet = "Sheet1";
                Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(currentSheet);
    
                int ColCounter = dt.Columns.Count;

                // 컬럼명을 먼저 기록한다.
                int columnidex = 0;
                foreach(DataColumn dc in dt.Columns)
                {
                    excelWorksheet.Cells[row, col+columnidex++] = dc.ColumnName;
                }

                // 컬럼명을 적은 Row 다음에 데이터를 적을 수 있게끔 증가한다.
                row++;

                DataRow[] rpt = dt.Select();
                foreach(DataRow dr in rpt)
                {
                    for(int i = 0; i < ColCounter; i++)
                    {
                        excelWorksheet.Cells[row, col+i] = dr[i].ToString();
                    }
                    row++;
                }

                string tempSavedFileName = SavedFile + "." + Guid.NewGuid().ToString();
               

                FileInfo f = new FileInfo(tempSavedFileName);
                if(f.Exists)
                    f.Delete(); // delete the file if it already exist.
                // Workbook 저장
                excelWorkbook.SaveAs(tempSavedFileName, Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Excel.XlSaveAsAccessMode.xlExclusive, false, false, null, null, null);
                // 클린업 작업
                excelWorkbook.Close(null, null, null);
                excelApp.Workbooks.Close();
                // excelApp.Application.Quit();
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorksheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                excelWorksheet = null;
                excelWorkbook = null;
                excelApp = null;
                GC.Collect();

                if(downloadPage != null)
                    Download(downloadPage, SavedFile, tempSavedFileName);

                return true;

            }
            catch( Exception theException )
            {
                GC.Collect();
                throw theException;
            }
        }
        #endregion

        #region 템플릿 파일 사용 유형 1
        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을
        /// 열어 엑셀 파일을 만든다.
        /// 저장된 파일의 다운로드를 요청하지 않는다.
        ///

        /// 입력 데이타
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// 저장 성공 여부
        public static bool ExportExistFile(DataTable dt, string OriginalFile, string SavedFile, string ws)
        {
            return PExportExistFile(dt, OriginalFile, SavedFile, ws, 1, 1, null);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을
        /// 열어 엑셀 파일을 만든다.
        /// 저장된 파일의 다운로드를 요청한다.
        ///

        /// 입력 데이타
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        public static bool ExportExistFile(DataTable dt, string OriginalFile, string SavedFile, string ws, Page downloadPage)
        {
            return PExportExistFile(dt, OriginalFile, SavedFile, ws, 1, 1, downloadPage);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을
        /// 열어 엑셀 파일을 만든다.
        /// 저장된 파일의 다운로드를 요청하지 않는다.
        ///

        /// 입력 데이타
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// Sheet에서 데이타의 시작 행
        /// Sheet에서 데이타의 시작 컬럼
        /// 저장 성공 여부
        public static bool ExportExistFile(DataTable dt, string OriginalFile, string SavedFile, string ws, int row, int col)
        {
            return PExportExistFile(dt, OriginalFile, SavedFile, ws, row, col, null);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을
        /// 열어 엑셀 파일을 만든다.
        /// 저장된 파일의 다운로드를 요청한다.
        ///

        /// 입력 데이타
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// Sheet에서 데이타의 시작 행
        /// Sheet에서 데이타의 시작 컬럼
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        public static bool ExportExistFile(DataTable dt, string OriginalFile, string SavedFile, string ws, int row, int col, Page downloadPage)
        {
            return PExportExistFile(dt, OriginalFile, SavedFile, ws, row, col, downloadPage);
        }

        ///


        /// 데이타 테이블을 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을
        /// 열어 엑셀 파일을 만든다.
        ///

        /// 입력 데이타
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// Sheet에서 데이타의 시작 행
        /// Sheet에서 데이타의 시작 컬럼
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        private static bool PExportExistFile(DataTable dt, string OriginalFile, string SavedFile, string ws, int row, int col, Page downloadPage)
        {
            try
            {
                DeleteTemporaryFiles();

                GC.Collect();// clean up any other excel guys hangin'' around...
                Excel.Application excelApp = new Excel.Application();
                Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(OriginalFile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                Excel.Sheets excelSheets = excelWorkbook.Worksheets;
                Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(ws);
                int ColCounter = dt.Columns.Count;

                // 컬럼명을 먼저 기록한다.
                int columnidex = 0;
                foreach(DataColumn dc in dt.Columns)
                {
                    excelWorksheet.Cells[row, col+columnidex++] = dc.ColumnName;
                }

                // 컬럼명을 적은 Row 다음에 데이터를 적을 수 있게끔 증가한다.
                row++;

                DataRow[] rpt = dt.Select();
                foreach(DataRow dr in rpt)
                {
                    for(int i = 0; i < ColCounter; i++)
                    {
                        excelWorksheet.Cells[row, i+col] = dr[i].ToString();
                    }
                    row++;
                }

                string tempSavedFileName = SavedFile + "." + Guid.NewGuid().ToString();

                FileInfo f = new FileInfo(tempSavedFileName);
                if(f.Exists)
                    f.Delete(); // delete the file if it already exist.
                // Workbook 저장
                excelWorkbook.SaveAs(tempSavedFileName, Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Excel.XlSaveAsAccessMode.xlExclusive, false, false, null, null, null);
                // 클린업 작업
                excelWorkbook.Close(null, null, null);
                excelApp.Workbooks.Close();
                // excelApp.Application.Quit();
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorksheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                excelWorksheet = null;
                excelWorkbook = null;
                excelApp = null;
                GC.Collect();

                if(downloadPage != null)
                    Download(downloadPage, SavedFile, tempSavedFileName);

                return true;

            }
            catch( Exception theException )
            {
                GC.Collect();
                throw theException;
            }
        }
        #endregion

        #region 템플릿 파일 사용 유형 2
        ///


        /// Array를 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을 열어
        /// Array에 저장된 키, 값 형태의 데이터를 엑셀 파일 Sheet의 해당 위치에 저장되는 엑셀 파일을 만든다.
        /// 엑셀 파일을 만든 뒤 다운로드를 수행하지 않는 오버로드
        ///

        /// 입력 데이타(Array)
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// 저장 성공 여부
        public static bool ExportExistFile(Hashtable ht, string OriginalFile, string SavedFile, string ws)
        {
            return PExportExistFile(ht, OriginalFile, SavedFile, ws, null);
        }

        ///


        /// Array를 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을 열어
        /// Array에 저장된 키, 값 형태의 데이터를 엑셀 파일 Sheet의 해당 위치에 저장되는 엑셀 파일을 만든다.
        /// 엑셀 파일을 만든 뒤 다운로드를 수행하는 오버로드
        ///

        /// 입력 데이타(Array)
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        public static bool ExportExistFile(Hashtable ht, string OriginalFile, string SavedFile, string ws, Page downloadPage)
        {
            return PExportExistFile(ht, OriginalFile, SavedFile, ws, downloadPage);
        }

        ///


        /// Array를 입력 데이타로 받아서 해당 데이타로 기존 엑셀 파일(혹은 서식 파일)을 열어
        /// Array에 저장된 키, 값 형태의 데이터를 엑셀 파일 Sheet의 해당 위치에 저장되는 엑셀 파일을 만든다.
        ///

        /// 입력 데이타(Array)
        /// 기존 엑셀 파일 경로명과 파일명
        /// 저장 경로명과 파일명
        /// 데이타가 저장될 Sheet명
        /// 엑셀 파일 다운로드를 요청한 페이지
        /// 저장 성공 여부
        private static bool PExportExistFile(Hashtable ht, string OriginalFile, string SavedFile, string ws, Page downloadPage)
        {
            try
            {
                GC.Collect();// clean up any other excel guys hangin'' around...
                Excel.Application excelApp = new Excel.Application();
                Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(OriginalFile, 0, false, 5, "", "", false, Excel.XlPlatform.xlWindows, "", true, false, 0, true, false, false);
                Excel.Sheets excelSheets = excelWorkbook.Worksheets;
                Excel.Worksheet excelWorksheet = (Excel.Worksheet)excelSheets.get_Item(ws);

    
                foreach(string str in ht.Keys)
                {
                    int x = str.IndexOf(":");
                    string col = str.Substring(0, x);
                    string row = str.Substring(x + 1, str.Length - x -1);
                    excelWorksheet.Cells[row, col] = ht[str];
     
                }
    
                FileInfo f = new FileInfo(SavedFile);

                if(f.Exists)
                    f.Delete(); // delete the file if it already exist.
                // Workbook 저장
                excelWorkbook.SaveAs(SavedFile, Excel.XlFileFormat.xlWorkbookNormal, null, null, false, false, Excel.XlSaveAsAccessMode.xlExclusive, false, false, null, null, null);
                // 클린업 작업
                excelWorkbook.Close(null, null, null);
                excelApp.Workbooks.Close();
                // excelApp.Application.Quit();
                excelApp.Quit();
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorksheet);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelWorkbook);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(excelApp);
                excelWorksheet = null;
                excelWorkbook = null;
                excelApp = null;
                GC.Collect();

                if(downloadPage != null)
                {
                    Download(downloadPage, SavedFile);
                }

                return true;

            }
            catch( Exception theException )
            {
                GC.Collect();
                throw theException;
            }
        }
        #endregion

        #region 임시 생성 엑셀 파일 정리
        private static void DeleteTemporaryFiles()
        {
            // 임시로 생성한 엑셀 파일들 삭제
            if(exportedFiles.Count > 0)
            {
                ArrayList tempFiles = new ArrayList();

                foreach(FileInfo fi in exportedFiles)
                {
                    TimeSpan diffTimes = new TimeSpan( DateTime.Now.Ticks - fi.CreationTime.Ticks );

                    if(diffTimes.TotalMinutes > deleteMinutePeriod)
                    {
                        tempFiles.Add(fi);
                        fi.Delete();
                    }
                }
       
                foreach(FileInfo fi in tempFiles)
                    exportedFiles.Remove(fi);
            }
        }
       
        private static void AddExportedFileName(FileInfo fi)
        {
            exportedFiles.Add(fi);
        }
        #endregion

        #region 엑셀 파일 DB 업로드

        ///


        /// 엑셀로부터 데이터를 추출하여 DataSet으로 반환한다.
        ///

        /// 업로드할 엑셀 파일
        /// 엑셀 데이터셋
        public static DataSet GetDataSetFromExcelFile(System.Web.UI.HtmlControls.HtmlInputFile hif)
        {
            return GetDataSetFromExcelFile(hif, "Sheet1", true);
        }

        ///


        /// 엑셀로부터 데이터를 추출하여 DataSet으로 반환한다.
        ///

        /// 업로드할 엑셀 파일
        /// 엑셀 파일에 컬럼명 포함 여부(기본값: 포함)
        /// 엑셀 데이터셋
        public static DataSet GetDataSetFromExcelFile(System.Web.UI.HtmlControls.HtmlInputFile hif, bool IsIncludeHeader)
        {
            return GetDataSetFromExcelFile(hif, "Sheet1", IsIncludeHeader);
        }

        ///


        /// 엑셀로부터 데이터를 추출하여 DataSet으로 반환한다.
        ///

        /// 업로드할 엑셀 파일
        /// 업로드할 엑셀 파일내의 워크 쉬트명(기본값:Sheet1)
        /// 엑셀 파일에 컬럼명 포함 여부(기본값: 포함)
        /// 엑셀 데이터셋
        public static DataSet GetDataSetFromExcelFile(System.Web.UI.HtmlControls.HtmlInputFile hif, string WorkSheet, bool IsIncludeHeader)
        {
            string FilePath = Upload(hif);
            string ConnectionString1 = string.Empty;
            string excelConnStrFormat = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + FilePath + ";Extended Properties=\"Excel 8.0;HDR={0}\"";

            if(IsIncludeHeader == true)
                ConnectionString1 = string.Format(excelConnStrFormat, "YES");
            else
                ConnectionString1 = string.Format(excelConnStrFormat, "NO");

            OleDbConnection conn = new OleDbConnection(ConnectionString1);

            string strQuery;
            strQuery = "select * from [" + WorkSheet + "$]";
   
            OleDbCommand cmd = new OleDbCommand(strQuery, conn);
            OleDbDataAdapter Adapter = new OleDbDataAdapter();
            Adapter.SelectCommand = cmd;
            DataSet dsExcel = new DataSet();
            Adapter.Fill(dsExcel);

            return dsExcel;
        }

        ///


        /// 원하는 엑셀 파일의 원하는 워크쉬트를 지정한 DB의 테이블에 업로드한다.
        /// 이 경우 ht 파라미터를 통해 워크쉬트의 특정열을 테이블의 특정 컬럼에 매핑할 수 있다.
        /// 단, 이 경우 엑셀 파일의 컬럼에 대해서는 F1, F2, F3 ... 식으로 이름을 붙여야 한다.
        /// 그렇지 않고 Excel 커넥션 스트링의 HDR=YES로 설정하면 첫째 Row가 컬럼명으로 인식되게
        /// 할 수도 있다.
        ///

        /// 업로드할 엑셀 파일
        /// 업로드할 엑셀 파일내의 워크 쉬트명(기본값:Sheet1)
        /// 업로드할 DB 연결 문자열
        /// 업로드할 테이블명
        /// 엑셀 파일 컬럼명과 DB 테이블 컬럼명과의 매핑 정보
        /// 엑셀파일 DB업로드 성공 여부
        public static bool ExcelFileDBUpload(System.Web.UI.HtmlControls.HtmlInputFile hif, string WorkSheet, string ConnectionString, string Table, Hashtable ht)
        {
            return ExcelFileDBUpload(hif, WorkSheet, ConnectionString, Table, ht, true);
        }

        ///


        /// 원하는 엑셀 파일의 원하는 워크쉬트를 지정한 DB의 테이블에 업로드한다.
        /// 이 경우 ht 파라미터를 통해 워크쉬트의 특정열을 테이블의 특정 컬럼에 매핑할 수 있다.
        /// 단, 이 경우 엑셀 파일의 컬럼에 대해서는 F1, F2, F3 ... 식으로 이름을 붙여야 한다.
        /// 그렇지 않고 Excel 커넥션 스트링의 HDR=YES로 설정하면 첫째 Row가 컬럼명으로 인식되게
        /// 할 수도 있다.
        ///

        /// 업로드할 엑셀 파일
        /// 업로드할 DB 연결 문자열
        /// 업로드할 테이블명
        /// 엑셀 파일 컬럼명과 DB 테이블 컬럼명과의 매핑 정보
        /// 엑셀파일 DB업로드 성공 여부
        public static bool ExcelFileDBUpload(System.Web.UI.HtmlControls.HtmlInputFile hif, string ConnectionString, string Table, Hashtable ht)
        {
            return ExcelFileDBUpload(hif, "Sheet1", ConnectionString, Table, ht, true);
        }

        ///


        /// 원하는 엑셀 파일의 원하는 워크쉬트를 지정한 DB의 테이블에 업로드한다.
        /// 이 경우 ht 파라미터를 통해 워크쉬트의 특정열을 테이블의 특정 컬럼에 매핑할 수 있다.
        /// 단, 이 경우 엑셀 파일의 컬럼에 대해서는 F1, F2, F3 ... 식으로 이름을 붙여야 한다.
        /// 그렇지 않고 Excel 커넥션 스트링의 HDR=YES로 설정하면 첫째 Row가 컬럼명으로 인식되게
        /// 할 수도 있다.
        ///

        /// 업로드할 엑셀 파일
        /// 업로드할 DB 연결 문자열
        /// 업로드할 테이블명
        /// 엑셀 파일 컬럼명과 DB 테이블 컬럼명과의 매핑 정보
        /// 엑셀 파일에 컬럼명 포함 여부(기본값: 포함)
        /// 엑셀파일 DB업로드 성공 여부
        public static bool ExcelFileDBUpload(System.Web.UI.HtmlControls.HtmlInputFile hif, string ConnectionString, string Table, Hashtable ht, bool IsIncludeHeader)
        {
            return ExcelFileDBUpload(hif, "Sheet1", ConnectionString, Table, ht, IsIncludeHeader);
        }

        ///


        /// 원하는 엑셀 파일의 원하는 워크쉬트를 지정한 DB의 테이블에 업로드한다.
        /// 이 경우 ht 파라미터를 통해 워크쉬트의 특정열을 테이블의 특정 컬럼에 매핑할 수 있다.
        /// 단, 이 경우 엑셀 파일의 컬럼에 대해서는 F1, F2, F3 ... 식으로 이름을 붙여야 한다.
        /// 그렇지 않고 Excel 커넥션 스트링의 HDR=YES로 설정하면 첫째 Row가 컬럼명으로 인식되게
        /// 할 수도 있다.
        ///

        /// 업로드할 엑셀 파일
        /// 업로드할 엑셀 파일내의 워크 쉬트명(기본값:Sheet1)
        /// 업로드할 DB 연결 문자열
        /// 업로드할 테이블명
        /// 엑셀 파일 컬럼명과 DB 테이블 컬럼명과의 매핑 정보
        /// 엑셀 파일에 컬럼명 포함 여부(기본값: 포함)
        /// 엑셀파일 DB업로드 성공 여부
        public static bool ExcelFileDBUpload(System.Web.UI.HtmlControls.HtmlInputFile hif, string WorkSheet, string ConnectionString, string Table, Hashtable ht, bool IsIncludeHeader)
        {

            //   dsExcel = SqlHelper.ExecuteDataset(ConnectionString1, CommandType.Text, strQuery);
            //   SqlHelper.FillDataset(ConnectionString1, CommandType.Text, strQuery, dsExcel, Table);

            DataSet dsExcel = GetDataSetFromExcelFile(hif, WorkSheet, IsIncludeHeader);

            string ConnectionString2 = ConnectionString;
            SqlConnection conn2 = new SqlConnection(ConnectionString2);
            string strQuery2;
            strQuery2 = "select * from " + Table;
            SqlCommand cmd2 = new SqlCommand(strQuery2, conn2);
            SqlDataAdapter adpt = new SqlDataAdapter();
            adpt.SelectCommand = cmd2;
   
            SqlCommandBuilder custCB = new SqlCommandBuilder(adpt);

            DataSet dsDB = new DataSet();
            adpt.FillSchema(dsDB, SchemaType.Mapped);
   
            foreach(DataRow excelRow in dsExcel.Tables[0].Rows)
            {
                DataRow dbRow = dsDB.Tables[0].NewRow();
                foreach(string excelCol in ht.Keys)
                {
                    string DBCol = ht[excelCol].ToString();
                    dbRow[DBCol] = excelRow[excelCol];
                }
                dsDB.Tables[0].Rows.Add(dbRow);
            }

            DataSet dsUpload = dsDB.GetChanges();
            int result = adpt.Update(dsUpload);
            if(dsUpload.Tables[0].Rows.Count == result)
                return true;
            else
                return false;

        }
        #endregion
  
        #region 엑셀 파일 Download
        ///


        /// 생성된 엑셀 파일을 다운로드를 수행하는 로직
        ///

        /// 저장된 엑셀파일의 다운로드를 요청한 페이지
        /// 다운로드시 보여줄 엑셀파일 경로명과 파일명
        /// 서버에 저장된 임시 엑셀파일 경로명과 파일명
        private static void Download(Page downloadPage, string excelfile, string tempSavedFileName)
        {
            using(System.Web.UI.Page dp = downloadPage)
            {
                FileInfo fi = new FileInfo(tempSavedFileName);
                AddExportedFileName(fi);
                dp.Response.Clear();
                dp.Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(excelfile));
                dp.Response.AddHeader("Content-Length", fi.Length.ToString());
                dp.Response.ContentType = "application/vnd.ms-exce";
                dp.Response.Charset = "";
                dp.EnableViewState = false;
                dp.Response.CacheControl = "public";
                dp.Response.WriteFile(fi.FullName);
                dp.Response.End();
            }
        }

        ///


        /// 생성된 엑셀 파일을 다운로드를 수행하는 로직
        ///

        /// 저장된 엑셀파일의 다운로드를 요청한 페이지
        /// 다운로드시 보여줄 엑셀파일 경로명과 파일명
        private static void Download(Page downloadPage, string excelfile)
        {
            using(System.Web.UI.Page dp = downloadPage)
            {
                FileInfo fi = new FileInfo(excelfile);
                dp.Response.Clear();
                dp.Response.AddHeader("Content-Disposition", "attachment; filename=" + Path.GetFileName(excelfile));
                dp.Response.AddHeader("Content-Length", fi.Length.ToString());
                dp.Response.ContentType = "application/vnd.ms-exce";
                dp.Response.Charset = "";
                dp.EnableViewState = false;
                dp.Response.CacheControl = "public";
                dp.Response.WriteFile(fi.FullName);
                dp.Response.End();
            }
        }
        #endregion

        #region 엑셀 파일 Upload
        private static string Upload(System.Web.UI.HtmlControls.HtmlInputFile hif)
        {

            if(hif.PostedFile.FileName.Length == 0)
            {
                throw new Exception("업로드할 파일이 없습니다.");
            }
            if(hif.PostedFile.ContentLength == 0)
            {
                throw new Exception("업로드할 파일의 크기가 0바이트입니다.");
            }

            string UploadPath = Path.GetTempPath();
   
            if(hif.PostedFile != null)
            {
                string fileName = Path.GetFileName(hif.PostedFile.FileName.ToString());
                string uniqueFilePath = GetUniqueFileNameWithPath(UploadPath, fileName);
                hif.PostedFile.SaveAs(uniqueFilePath);
                return uniqueFilePath;
            }
            else
            {
                throw new ApplicationException("업로드할 파일이 없습니다.");
            }
        }

        private static string GetUniqueFileNameWithPath(string dirPath, string fileN)
        {
            string fileName = fileN;

            int indexOfDot = fileName.LastIndexOf(".");
            string strName = fileName.Substring(0, indexOfDot);
            string strExt = fileName.Substring(indexOfDot+1);

            bool bExist = true;
            int fileCount = 0;

            while(bExist)
            {
                if(File.Exists(Path.Combine(dirPath, fileName)))
                {
                    fileCount++;
                    fileName = strName + "(" + fileCount + ")." +strExt;
                }
                else
                {
                    bExist = false;
                }
            }

            return Path.Combine(dirPath, fileName);
        }
        #endregion
    }
}

Posted by SB패밀리


파워빌더 11.5 버전 테스트


FTP서버에 파일을 Upload, Download, Delete, 목록가져오기 등을 구현하는 예제입니다.

해당 Zip파일을 풀면 ftp.dll과 이 dll을 파워빌더에서 API로 사용하는 방법이 설명되어 있는 파일, 그리고 이를 구현한 PB n.v.o가 PBL에 있습니다.

ftp.dll은 system32폴더 또는 파워빌더 실행파일이 있는 위치에 두시면
됩니다.


[ftp1.pbl]
------------------------------------------------------------------------
// FTP
n_ftp in_ftp

// FTP UPload

string is_server, is_user, is_pass, is_serverfilename, is_clientfilename


is_server = a_server
is_user = a_user
is_pass = a_pass
is_serverfilename = a_serverfilename
is_clientfilename = a_clientfilename

    // 1. FTP object 생성
    in_ftp    = create n_ftp 

    // 2. FTP Connect
    Int li_i
    li_i = in_ftp.FTPConnect(is_server, is_user, is_pass)

    if li_i <> 0 then
       MessageBox("오류", "FTP Server에 접속중 오류가 발생했습니다.", Exclamation!)
       destroy in_ftp
       return
    end if

    // 3. FTP Transfer
    Int li_rtn
    string s_server_file, s_client_file
    s_server_file = is_serverfilename //"c:\\test.txt"
    s_client_file = is_clientfilename //"/tmp/test"

    // 송신 put
    li_rtn = in_ftp.FTPputFile(s_client_file, s_server_file, 0)

   
    /* -ftp의 사용법------------------------------------------------------------
    FTPgetCurrentDir ( return string(blob) ) 
    FTPsetCurrentDirUp ()
    FTPsetCurrentDir ( "디렉토리")
    FTPfileList ( return string(blob) )
    FTPgetFile ( String REMOTE_FILE, String LOCAL_FILE, integer BINARY_OR_TEXT )
    FTPcreateDir ( String NEW_DIR )
    FTPdeleteFile ( String DEL_FILE )
    FTPdeleteDir ( String DEL_DIR )
    FTPrenameDir ( String CURR_DIR, String NEW_DIR )
    FTPputFile ( String LOCAL_FILE, String REMOTE_FILE, integer BINARY_OR_TEXT )
    FTPping ( String IPaddress )
    ------------------------------------------------------------------------- */   

    if li_rtn = 0 then
       //Transfer Success..
        MessageBox("안내", "파일전송 성공!")
    else
       //Transfer Failure..
       MessageBox("안내", "파일전송 실패!")
       return
    end if

    // 4. FTP Disconnect
    Int li_rtn2
    li_rtn2 = in_ftp.FTPDisconnect()
    if li_rtn2 <> 0 then
       MessageBox("오류", "FTP Disconnect를 하는 중에 오류가 발생했습니다.", Exclamation!)
       destroy in_ftp
       return
    end if

    // 5. FTP Close
    destroy in_ftp

------------------------------------------------------------------------------------------

출처 : 구글 검색
고맙게 잘 봤습니다.

Posted by SB패밀리