<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>excel &#8211; 記下來</title>
	<atom:link href="https://noter.tw/tag/excel/feed/" rel="self" type="application/rss+xml" />
	<link>https://noter.tw</link>
	<description>一路上踩到的坑、遇到的問題，一點一滴記下來，希望能幫助到需要的人~</description>
	<lastBuildDate>Sun, 04 Jun 2023 13:06:43 +0000</lastBuildDate>
	<language>zh-TW</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.6.3</generator>

<image>
	<url>https://noter.tw/wp-content/uploads/cropped-old-1130742_1920-1-32x32.jpg</url>
	<title>excel &#8211; 記下來</title>
	<link>https://noter.tw</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation</title>
		<link>https://noter.tw/9117/excel-filter-and-validation/</link>
					<comments>https://noter.tw/9117/excel-filter-and-validation/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Thu, 12 Aug 2021 04:30:00 +0000</pubDate>
				<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[其他]]></category>
		<category><![CDATA[快速搜尋]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[快速篩選]]></category>
		<category><![CDATA[filter]]></category>
		<category><![CDATA[過濾器]]></category>
		<category><![CDATA[過濾資料]]></category>
		<category><![CDATA[資料驗證]]></category>
		<category><![CDATA[Data Validation]]></category>
		<category><![CDATA[篩選器]]></category>
		<category><![CDATA[下拉選單]]></category>
		<category><![CDATA[條件驗證]]></category>
		<category><![CDATA[輸入限制]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=9117</guid>

					<description><![CDATA[<p>小蛙又來更新 Excel 系列了，用到越多 Excel 進行資料處理，越能感受到 Excel 的強大，而且許多功能 Excel 跟 Google 試算表 都通用 (學一次就可以通吃超划算的)，小蛙記錄&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙又來更新 <a href="https://noter.tw/?s=excel" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">Excel 系列</a>了，用到越多 Excel 進行資料處理，越能感受到 Excel 的強大，而且許多功能 Excel 跟 <a href="https://www.google.com.tw/intl/zh-TW/sheets/about/" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">Google 試算表<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 都通用 (學一次就可以通吃超划算的)，小蛙記錄的這些都還是新手級幼幼班，但發現這些功能的時候還是覺得很開心！這篇文章要記錄使用 Excel 建立篩選器 (Filter) 及使用資料驗證 Validation 的方法。</p>



<span id="more-9117"></span>



<h2 class="para wp-block-heading">Excel 資料驗證 Validation</h2>



<p>Excel 資料驗證從字面上很難跟下拉式選單聯想在一起，頂多就是在特定儲存格內輸入不符合的格式會跳出錯誤，但 Excel 的資料驗證功能很強大，如果將儲存格驗證準則設定成清單，還會自動加上下拉選單的功能，非常方便。</p>



<p>下面的範例是小蛙想要在居住縣市的地方進行資料驗證，而驗證的內容為右邊的「縣市」I 欄，找到上方的「資料」頁籤 (1)，接著框選要進行資料驗證的範圍 (2)，再來找「資料驗證」(3) 用力點下去</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWT4REmBfMQQM3Co2hYtGRXI9nqm4nE5Yapye_shQZlM11KjjUpSUza89l7qbYkV1xWW-VE0chA-CNamVI4cik5cR4tSHDMp1KvUdsTf7AtDwoozZzDvLduiv0ubYOuAJjq1QZjXje7qvTEXprkf1mOhQ=w610-h718-no?authuser=3" alt="Excel Data Validation 1" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>開啟的視窗裡面，儲存格內允許，這邊選擇清單，因為我們要讓使用者從固定的縣市裡面挑選，不讓輸入改用挑選的原因也很顯而易見，每個人習慣不同，有的輸入 &#8220;台北市&#8221;，有的則是 &#8220;臺北市&#8221;，如果可以固定讓使用者挑選，後期可以省掉很多清理資料的麻煩</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLV572AwXfqTj3tp8Pep7LfLAE5nI5R7XipYnNM1xnHQ-P89JWqHNeXx4u7M359U_H2mGHzfYC5VOUAx9BhcnBIZfXj0aybteCigF_kIjMx9qUiIn1MnCJ6riEFayaYHJB0qgoleNnqH3F613wU7tGwgTw=w399-h364-no?authuser=3" alt="Excel Data Validation 2" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>接著選擇來源，可以自己輸入欄位，也可以直接用挑選的，選完後點選右側小圖示或 Enter 結束選取</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLURnTzLzzDe3uU6xdx83vltOy3WQ7YXWmxiRaLEBlmoEl8wmEhlhSFF5YsEQBF-Gt65MbpbBsQpMdmN1WTMFdCeurC6WT4nFsnM1Xu3qK4_8Tnx1i-juIJ8GtACIaSlySCVCgM1QTO6notykp5iUO0UXw=w405-h637-no?authuser=3" alt="Excel Data Validation 3" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>回到資料驗證視窗，點擊確定</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXWK24Ry5_QI4DDskuMfNF5Hv642_4-znrTTtetmLP-9dEMjqDUz63LxB3R_8GhEl7eeLV9iSBi4TjKVRt0HiJeVeQ2BhQlrF9wOXY6iaR_8YJXOhYixRo3jKAywdYGyD78TaXG_U5zNDnFsyl71w7x0w=w399-h363-no?authuser=3" alt="Excel Data Validation 4" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>可以看到居住縣市下方都出現一個往下的箭頭，點了之後可以從這些清單裡面挑選</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXo_i4uYwpUuSBxziCDTXDxG3365DYvFYtNadRIYNMxVHn7r1Y3jgAl3KTUIpAkDYZCViYYkZuAh42DtqBg9O4CFUTj_wEPrupneaXAzRHqvKLyniuIvRQ8ttmZXmb1jfQqHyh15d2A-BIS6K3QI28mpg=w240-h202-no?authuser=3" alt="Excel Data Validation 5" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>原本的儲存格也還是可以透過輸入的方式來加入資料，不過如果遇到提到 台北市 的例子，Excel 在驗證的資料內找不到許可值的話，即跳出錯誤訊息提示內容有誤</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXAKEsXVfltsZrW3GIIxzlZY4Mu8TTKFU-EgdSng6tTnlqUrVyJN-ipT5yMJ6ZebDFuGC7pW_7yMjOF1hr9i94yizDjMaDJfg-KQTe9YHXT-WIxFxNUzzWuZ05vDlTAFhAeW9n-lSTxipWmuMePqtyCQw=w387-h209-no?authuser=3" alt="Excel Data Validation 6" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>其他資料驗證格式還有整數、實數、日期、時間、文字長度 &#8230; 等等的，都可以去玩玩看喔！</p>



<h2 class="para wp-block-heading">Excel 篩選器 Filter</h2>



<p>Excel 篩選器的功能就是可以在最上面一列加上一個下拉小箭頭，點了小箭頭之後，可以自動根據選擇的條件對該欄位的資料做篩選，例如只顯示某些值的資料。</p>



<p>接續剛剛的例子，小蛙把所有人的居住縣市資料都填上了，希望可以在該欄位上加入篩選器（就是快速搜尋/過濾的意思）功能，選中要加入篩選器的欄位 (1)，進入資料頁籤 (2) 後選擇 篩選 (3)</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLX75djhuPKoinRpwWlB0Jh1__dnMmPQUZ67E2-iI4SAGxc_qXJvcBD9Y6r9EdlwF2bC4HDHrYdV-RJCSs5bv8aePIMEywZT6XPKzlqwSnPFbEFCBwjk6Ksv92I6pHlRrr6rjQeqtmGBrsT4j7u-hOV1Jw=w381-h355-no?authuser=3" alt="Excel Filter 1" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>表頭處出現了往下的箭頭，點擊開啟篩選視窗，可以對欄位做排序及文字篩選，小蛙這邊勾選址顯示苗栗縣的資料</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWjZQGjBy5WAefY-gfA-9xY7RWJEL8gZ845R4EmqLB_-2XvoHuDo-ZUNv2rxpJ1MM_t8_CqIr8WtErQiQCOeWKJZHvvxm33qcZzK4g4cw0sR7EzV2utccvUTCs9wn7MXfq__32Y7Gh9JizXfTXVpwMrNw=w287-h350-no?authuser=3" alt="Excel Filter 2" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p>回到 Excel 可以看到只剩住在苗栗的 阿七 跟 山巴 囉！</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLVablq24hIZ9ywB6FzYkDmn3PG-RVNaZViwMLvgynOHtpyNN_aGc9f0D_KNVIgWbZDru3TMA1k1eFfiXCwY1vCC9Bd5fOO_kc-7a9TZjNeVoeYiEGNkL_vpk3jLycDfhVQhlJ1KLyYZZzCO5Wz48r-Keg=w219-h101-no?authuser=3" alt="Excel Filter 3" title="【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation"></figure></div>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">【Excel, Google Sheets】加入篩選器 Filter 及 資料驗證 Validation</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/9117/excel-filter-and-validation/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</title>
		<link>https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/</link>
					<comments>https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 06 Aug 2021 05:41:07 +0000</pubDate>
				<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[excel 尋找資料]]></category>
		<category><![CDATA[搜尋資料]]></category>
		<category><![CDATA[自動填入]]></category>
		<category><![CDATA[MATCH]]></category>
		<category><![CDATA[比對]]></category>
		<category><![CDATA[從清單中挑選自動填入]]></category>
		<category><![CDATA[VLOOKUP]]></category>
		<category><![CDATA[搜尋表格]]></category>
		<category><![CDATA[填入資料]]></category>
		<category><![CDATA[index]]></category>
		<category><![CDATA[excel index]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[index excel]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=9063</guid>

					<description><![CDATA[<p>Excel 小蛙一直沒辦法練熟，通常只記得常用的幾個公式，隨著需求變化及增加，學的公式也多了起來，這篇小蛙要記錄 搜尋表格 填入資料 的利器 VLOOKUP 以及如何使用 INDEX + MATCH 達到同樣的功能。</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p class="withcode">Excel 小蛙一直沒辦法練熟，通常只記得常用的幾個公式，隨著需求變化及增加，學的公式也多了起來，這篇小蛙要記錄 搜尋表格 填入資料 的利器 <code>VLOOKUP</code> 以及如何使用 <code>INDEX</code> + <code>MATCH</code> 達到同樣的功能。有分拆 Excel 的需求可以看<a href="https://noter.tw/9061/split-a-excel-to-files/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">上一篇</a>喔！</p>



<span id="more-9063"></span>



<p>小蛙今天遇到一個狀況是，Excel 裡面包含客戶名單及消費金額，需要將金額填入旁邊一份打亂過的名單內，之前都知道有 <code>VLOOKUP</code> 這個公式，但每次學完就忘了，今天這個需求正好可以使用 <code>VLOOKUP</code> 來完成，趁此機會把它弄清楚。更詳細的教學可參考 使用 <a href="https://support.microsoft.com/zh-tw/office/%E4%BD%BF%E7%94%A8-vlookup%E3%80%81index-%E6%88%96-match-%E5%B0%8B%E6%89%BE%E5%80%BC-68297403-7c3c-4150-9e3c-4d348188976b" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">VLOOKUP、INDEX 或 MATCH 尋找值 @ Microsoft<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。</p>



<h2 class="wp-block-heading">需求</h2>



<p>如上述（可見下圖），希望可以透過公式將 F 欄的金額正確填上</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLUbdm470InED4ddbcZqUi-acC0D-QWAUrqvQEM61PeWzD5jkFwt3CdImQjhDPGlBbQ3Q2J8aZ1UrtkoWCgNYtDrdL5aPsTI3MYEIw64rxWUKw9b48AZVU2eHFtUgmm7wU3JPeRVY2YE83aTMQHHLUCbEA=w570-h280-no?authuser=2" alt="AM JKLUbdm470InED4ddbcZqUi acC0D QWAUrqvQEM61PeWzD5jkFwt3CdImQjhDPGlBbQ3Q2J8aZ1UrtkoWCgNYtDrdL5aPsTI3MYEIw64rxWUKw9b48AZVU2eHFtUgmm7wU3JPeRVY2YE83aTMQHHLUCbEA=w570 h280 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<h2 class="para wp-block-heading">使用 VLOOKUP</h2>



<p class="withcode">我們希望將下圖中 F 欄的金額參照 B 欄後自動填上，首先到 F2 輸入 <code>=VLOOKUP(</code> 後開始輸入公式</p>



<pre class="wp-block-preformatted withcode">VLOOKUP(E2, B2:C9, 2, FALSE)

E2    =&gt; 要查找參照的對象，這格是丁九，我們希望拿著 丁九 的名字去查金額
B2:C9 =&gt; 拿著 丁九 的名字到 B2:C9 儲存格內查找有沒有 丁九
2     =&gt; 如果查到 丁九 的名字後，要抓取的欄位，1 為 丁九 2 為 67657
FALSE =&gt; 必須要完全比對到 丁九 才行，多一個字少一個字都不行</pre>



<p>VLOOKUP 的參數為 ( <span class="has-inline-color has-vivid-red-color">查找對象</span>, <span class="has-inline-color has-vivid-cyan-blue-color">查找範圍</span>, <span class="has-inline-color has-vivid-purple-color">找到後第幾個欄位</span>,<span style="color:#ab521b" class="has-inline-color"> 類似的要出現嗎</span> )，其實不用記也沒關係，大概知道一下 VLOOKUP 可以做到的事及一些些用法，在 Excel 裡面輸入 VLOOKUP 的時候，就會跳出提示了 (只是有實際做過或清楚一點會比較快可以寫出，不用每次都要查)</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLUxiU-rXe_k6qmnxzxpDGdnyqXmj2D3SGNHXeVXlKrgi9QB7Xa3GyPbBcTxPnGhX2sFLyQYemDypTcCBhwToAgx5SnyGz0hFdKzMjlNm5eMxhQlaOPjdw4dpjrdcjVv1LNDjQLXv864kIeMhTs2Fw9P0A=w667-h382-no?authuser=2" alt="AM JKLUxiU rXe k6qmnxzxpDGdnyqXmj2D3SGNHXeVXlKrgi9QB7Xa3GyPbBcTxPnGhX2sFLyQYemDypTcCBhwToAgx5SnyGz0hFdKzMjlNm5eMxhQlaOPjdw4dpjrdcjVv1LNDjQLXv864kIeMhTs2Fw9P0A=w667 h382 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<p>噹啷，正確抓到 丁九 的消費金額</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXgGLXsIWNUDCbwhTngUDWC7aPh05MqYcJIH3r8JTTO6tDlvEHqOW6Iu7C0jEjMa1cdPsit222WVDig9S0jkcy0lTBHHi6Z8GNr-Z_hyDqVzTw1cE307VypcWbkgT-Qxrln4e33a0DnTvi_J350r9eSYw=w571-h275-no?authuser=2" alt="AM JKLXgGLXsIWNUDCbwhTngUDWC7aPh05MqYcJIH3r8JTTO6tDlvEHqOW6Iu7C0jEjMa1cdPsit222WVDig9S0jkcy0lTBHHi6Z8GNr Z hyDqVzTw1cE307VypcWbkgT Qxrln4e33a0DnTvi J350r9eSYw=w571 h275 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<p class="withcode">往下拉填滿公式後發現，怎麼又出現討人厭的 <code>#N/A</code> </p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLX9zotRsu6Wb2M2F9bVfKTEnFYKuJjr6VVMzXiuwH0nRp1dQ2UEipgPuLlsygiKHFMg5ErUnMtnoc2OYP_HVdwnSSl7IfGAefcLWbsqsNSiNCZPlaSK3hCjeOp4GwmaOYfx7EsCPJA0fm2llhIvXcq4jQ=w612-h384-no?authuser=2" alt="AM JKLX9zotRsu6Wb2M2F9bVfKTEnFYKuJjr6VVMzXiuwH0nRp1dQ2UEipgPuLlsygiKHFMg5ErUnMtnoc2OYP HVdwnSSl7IfGAefcLWbsqsNSiNCZPlaSK3hCjeOp4GwmaOYfx7EsCPJA0fm2llhIvXcq4jQ=w612 h384 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<p class="withcode">查看 潘八 這格的比對範圍變成 <code>B3:C10</code> 而不是我們原本設定的 <code>B2:C9</code>，李四 的那格也變成 <code>B4:C11</code>，比對範圍逐漸偏移，導致有些名字比對不到</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLVNrWTe-_g3tKyCxERfZRhoUttLGBcgHdHQQiZjnSV412hVNUg6X-uKWZZ0MBHIkYeZPnOAYyeDKy-i9W0S7GZg0N4C5PxKRL9UQP3rBV0fJvY2j5jqWgJvdTMErlS7lZLyFZG5A2yPF4743BA2fY5eHg=w651-h380-no?authuser=2" alt="AM JKLVNrWTe g3tKyCxERfZRhoUttLGBcgHdHQQiZjnSV412hVNUg6X uKWZZ0MBHIkYeZPnOAYyeDKy i9W0S7GZg0N4C5PxKRL9UQP3rBV0fJvY2j5jqWgJvdTMErlS7lZLyFZG5A2yPF4743BA2fY5eHg=w651 h380 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<p class="withcode">Excel 裡面有一個超頑固的好朋友 <code>$</code> 可以用來「固定」住欄或列，不會隨著填滿公式而自動遞增，再試一次就成功囉！每個人的名字都填上了正確的消費金額。</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLUXzymp0ZaOE_Ap-JgMXACLKytvpQiJfIcXmIbp1fXRMcheK4lcuUStIi0jFC3-TChpFociyHjKm1H4Gb6HMlq9Yy_BUtpQv6rhe_00ufDMfiTnQD-DBph_u-0oYlcMoTExTx-fHm7aoIFPQSxk5SopQg=w644-h383-no?authuser=2" alt="AM JKLUXzymp0ZaOE Ap JgMXACLKytvpQiJfIcXmIbp1fXRMcheK4lcuUStIi0jFC3 TChpFociyHjKm1H4Gb6HMlq9Yy BUtpQv6rhe 00ufDMfiTnQD DBph u 0oYlcMoTExTx fHm7aoIFPQSxk5SopQg=w644 h383 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<h2 class="para wp-block-heading">使用 INDEX + MATCH</h2>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow"><p>使用 VLOOKUP 有一些限制，VLOOKUP 函數只能從左至右尋找值。 這表示包含您尋找之值的欄應一直位於包含退貨值的欄左側。 如果您的試算表不是以這種方式建立，請不要使用 VLOOKUP。 請改為使用 INDEX 和 MATCH 函數的組合。</p><cite>from <a href="https://support.microsoft.com/zh-tw/office/%E4%BD%BF%E7%94%A8-vlookup%E3%80%81index-%E6%88%96-match-%E5%B0%8B%E6%89%BE%E5%80%BC-68297403-7c3c-4150-9e3c-4d348188976b" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">使用 VLOOKUP、INDEX 或 MATCH 尋找值<span class="wpel-icon wpel-image wpel-icon-6"></span></a></cite></blockquote>



<p>INDEX + MATCH 也可以做到一樣的事情，多學一點如果真的遇到 VLOOKUP 不能處理的狀況，還是能安全下莊，這個公式就長了一點，不過仔細看其實感覺上是差不多的。</p>



<pre class="wp-block-preformatted withcode">MATCH(E2, B$2:B$9, 0)

E2      =&gt; 要查找參照的對象，這格是丁九，我們希望拿著 丁九 的名字去查
B$2:B$9 =&gt; 拿著 丁九 的名字到 B2:B9 儲存格內查找有沒有 丁九
0       =&gt; 要完全符合 丁九 的名字才行


INDEX(B$2:C$9, MATCH(), 2)
B$2:C$9 =&gt; 要比對與取得的範圍
MATCH() =&gt; 上面的 MATCH(E2, B$2:B$9, 0)
2       =&gt; B$2:C$9 的第幾個欄位

完整公式
INDEX(B$2:C$9, MATCH(E2, B$2:B$9, 0), 2)</pre>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLUl3YPdC0c9iQIrSxcerQLSY0KwwAgKe7GOPiAb_aDvbYJiUaeWcDZ4XPLH9DgFWPp1RyKcAhNEpzNnqQMbMJdni4prxqkzp3iJqXK14KSIL64WzSyjJHpuWroPBcxgBboZXlKr94qdAgou_B6ZiAcAjg=w714-h379-no?authuser=2" alt="AM JKLUl3YPdC0c9iQIrSxcerQLSY0KwwAgKe7GOPiAb aDvbYJiUaeWcDZ4XPLH9DgFWPp1RyKcAhNEpzNnqQMbMJdni4prxqkzp3iJqXK14KSIL64WzSyjJHpuWroPBcxgBboZXlKr94qdAgou B6ZiAcAjg=w714 h379 no?authuser=2 【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH" title="【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH"></figure></div>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">【Excel, Google Sheets】搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>分拆 Excel 成多個檔案 ( Split A Excel to Files)</title>
		<link>https://noter.tw/9061/split-a-excel-to-files/</link>
					<comments>https://noter.tw/9061/split-a-excel-to-files/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 04 Aug 2021 12:38:26 +0000</pubDate>
				<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[快速到末列]]></category>
		<category><![CDATA[excel 快捷鍵]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[刪除空白行]]></category>
		<category><![CDATA[刪除空白列]]></category>
		<category><![CDATA[excel 分拆]]></category>
		<category><![CDATA[資料筆數]]></category>
		<category><![CDATA[excel 切分]]></category>
		<category><![CDATA[Split A Excel to Files]]></category>
		<category><![CDATA[excel 另存檔案]]></category>
		<category><![CDATA[excel肥大]]></category>
		<category><![CDATA[excel拆分檔案]]></category>
		<category><![CDATA[excel減肥]]></category>
		<category><![CDATA[excel 分檔]]></category>
		<category><![CDATA[刪除多餘空白]]></category>
		<category><![CDATA[空白儲存格]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=9061</guid>

					<description><![CDATA[<p>相信現在如果要整理一大堆資料，大部份的人都會使用 Excel 來做吧！如果沒有 Microsoft Excel，也會使用類似的試算表工具，如前面提到過幫 Google 表單收資料的 Google 試算&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>相信現在如果要整理一大堆資料，大部份的人都會使用 Excel 來做吧！如果沒有 Microsoft Excel，也會使用類似的試算表工具，如<a href="https://noter.tw/8604/google-formranger/" target="_blank" rel="noreferrer noopener" data-wpel-link="internal">前面</a>提到過幫 Google 表單收資料的 Google 試算表 ( Sheets )，Excel 可以完成的工作比小蛙想像的還要多，這篇記錄怎麼把一個很大的 Excel 內的資料，分拆到許多個別小檔案 ( Split A Excel to Files )！</p>



<span id="more-9061"></span>



<p>小蛙這邊常常需要處理非常龐大的 Excel 資料，有時候要把資料另存成比較小的子集合，都要手動複製需要的資料，再存到另一個 Excel，上網找了一下發現這篇文章 <a href="https://support.nationbuilder.com/en/articles/2309128-how-to-split-a-csv-or-excel-file" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">How to split a CSV or Excel file<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 提供了很棒的工具！甚至連巨集的程式碼都放上去讓人使用（其實之前是看到另一篇文章提供增益集，但小蛙測試之後沒有反應），這篇文章要介紹這工具怎麼使用！</p>



<script type="application/ld+json">{"@context":"http:\/\/schema.org","@type":"VideoObject","name":"快速分拆 Excel | 超巨大 Excel 也不怕 | 使用巨集輕鬆把 Excel 拆分成多個檔案 | 電腦疑難雜症 | Split a Excel file | 電腦疑難雜症 Ep4 | 記下來","description":"小蛙今天收到一個需求要把 #超大 #Excel 分拆成多檔案\n找了一陣子發現 Jay Godfrey 的文章超清楚\n試了一下真的簡單又快速\n把他做影片留給有需要的朋友～\n\n補充連結：\n1. How to split a CSV or Excel file\nhttps:\/\/s.noter.tw\/-quj3n\n\n===記下來播放清單===\n1. iRent | GoShare | 自助 | 共享 | 記下來\nhttps:\/\/s.noter.tw\/mfx72\n2. 教學 | 分享 | 記錄 | 記下來\nhttps:\/\/s.noter.tw\/rixhv\n3. 投資 | 金融 | 股票 | 好康回饋 | 記下來\nhttps:\/\/s.noter.tw\/gcvl6\n4. 開箱 | 實測 | 東玩西玩 | 記下來\nhttps:\/\/s.noter.tw\/kkw08\n5. Mac 技巧 | 教學 | 記下來\nhttps:\/\/s.noter.tw\/aykwf\n6. 海水缸 | 養魚 | 水族 | 記下來\nhttps:\/\/s.noter.tw\/kkrnm\n\n===製作工具===\nFinal Cut Pro X\n\n===多媒體來源===\n1. 阿咕\n2. Icons made by Freepik from Flaticon\nhttps:\/\/www.freepik.com\nhttps:\/\/www.flaticon.com","thumbnailUrl":"https:\/\/i.ytimg.com\/vi\/T-7WNrelSRk\/maxresdefault.jpg","uploadDate":"2021-08-03T15:15:17Z","duration":"PT1M20S","embedUrl":"https:\/\/www.youtube.com\/watch?v=T-7WNrelSRk"}</script>


<div class="wp-block-image no-lightbox">
<figure class="aligncenter size-large is-resized"><a href="https://www.youtube.com/watch?v=4bzQZpfZ264&amp;list=PL1o1M_rBW-353dggzroc54hx4Edw2_ICa&amp;index=92" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img fetchpriority="high" decoding="async" src="https://img.youtube.com/vi/T-7WNrelSRk/maxresdefault.jpg" alt="Excel 拆分檔案教學" width="640" height="360" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></a><figcaption class="wp-element-caption">(點圖開啟 YouTube)</figcaption></figure></div>


<h2 class="wp-block-heading para">下載巨集</h2>



<p>進入文章後於中間部份找到 Click Here 可以下載巨集</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWsEfV5xO6ySQwaIGEiG0oa35FAzcZL_ewIpZAFgSQsVTKAnYAlOjfCwyJJlfziuLS-1ELveYPLG8gbaAPHdqGUxD3Z8IXAhnm1BaqzILExbA4aFT51IOpUw7y4_-fnlsZLe_FsO1EzlsUksZFO5gV1qw=w839-h459-no?authuser=2" alt="How to split a CSV or Excel file 1" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p>作者也非常好心，把完整巨集的程式碼放在最下面並把教學分享給大家 (可直接到 <a href="https://support.nationbuilder.com/en/articles/2309128-how-to-split-a-csv-or-excel-file" target="_blank" rel="noreferrer noopener nofollow external" data-wpel-link="external" class="wpel-icon-right">How to split a CSV or Excel file<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 去看)，小蛙直接用作者提供的巨集檔來測試。</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLX_JN1dlciPggoTx4od_mumaxvHE-8vGVvivXoG1l_iOnpXixNZOGzJz6kloyHOdtAejODUk8-QhkVDHC04PMfvMUQdndAOSDBt29xVFG-jq7zQShY0g9S9s6aGkgRVA2VM_nNCRKlAY4Lab9cHM28DvQ=w832-h365-no?authuser=2" alt="How to split a CSV or Excel file 2" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<h2 class="wp-block-heading para">使用巨集</h2>



<p class="withcode">解壓縮後得到 <code>ExcelFileSplitter.xl</code>sm 點擊滑鼠左鍵兩下執行，第一個黃色框框 (C6) 要填入的是表頭數，第二個黃色框框 (C9) 則是要切成幾個 Excel 檔案，執行完成後最下面會出現過程及處理狀況</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWcPjekC6IL_5_H_rY3habrEfTsswFgV4KB1VZZU7T0XVbtlOCyiMozSi2sbjiaaE3kIB1ezEF9m6VZO1Q-LAjInaC1ee1s6LfuIfK6K-p491joCuWdbjph_ouQABSLHUrGY2JJFJ9jr9_Ilsry_Fj6HQ=w1113-h632-no?authuser=2" alt="How to split a CSV or Excel file 3" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p>接著開啟要進行分拆的資料，小蛙隨便抓了台新銀行的據點位置資訊，最上面那行就是表頭，因此 C6 填入 1</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWXzZ25WdAtwZCTfK37NcAjGrDniX_qht7fxRMfYnlCrcAvEs_latPwIHY4KWjTZmNP-KHY_HWhphrQwIq8QEppbr5QlQcnyc5wMAFMB5LrVhrdPzyrA0LGsWUOZ-7kh4QFCILeBnIxs_bjHbBOEBwQog=w931-h501-no?authuser=2" alt="How to split a CSV or Excel file 4" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p class="withcode">確定輸入的資料正確後，按下 <code>Ctrl + Shift + S</code> 進行分拆，完成後下方顯示執行狀況</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXiWMI-IEi4Yd71MTl73dVFQRaU-G5FjLXXNS9Qje7WqBFriGaJVHxZgaxIqhPZfbIG4__QdUw5zXc8YWOLnOau9OvwcUPfnV70fJyEiooSk-L43msldmYrKWRSh8T9t456kyjvoPMMUg7MF-cy7XwgSA=w1122-h688-no?authuser=2" alt="How to split a CSV or Excel file 5" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p>這樣就完成了！是不是超簡單呢？小蛙也分拆過約二十萬筆資料的 Excel，也是短短十來秒時間內就完成，真的是超強大的！</p>



<h2 class="wp-block-heading para">清理 Excel</h2>



<p>另外同場加映，小蛙第一次用的時候發現資料筆數明明是 21 筆，巨集中卻顯示 144 筆，原因是很多情況下對於 Excel 格式做了變動，或是原本有資料但後來被刪掉了，這些情況都有可能讓 Excel 繼續花費空間去儲存資訊，因此如果遇到這種狀況，可以先把空白儲存格的部份刪除。</p>



<p class="withcode">首先如果資料量很大，可以透過 <code>Ctrl + ↓</code> 移動到最末筆資料</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLWhFwXalCNdtnORHb9OFYB87-4fpGuD8YARCnxRMbi0BYdZAdfemgZT0yMO1mSaknZRDegQ-_UuMJa0C6hx-73iAZtrCzB6MYKAmVDKzwyDX76hZABsYaNNOFZ1zOZrXPmNa__c8hnq5rT8s6FM6nM9BA=w1087-h534-no?authuser=2" alt="clean excel 1" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p>選擇最末筆下面的空白 Row</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLXIdKe-2Ropu4vw8-VbSpZUiqc63sRIxx4ddIMLlljVmBEnUiw7t7r0WEVogeDArRBnrr0xqc2AXddLNmvQ_fvI_gG7dC8LA1mEKHJ6wf3Hxkv2xWeA0OXBsXKPp3uMdRIS3Mc0KO2SC19-w5p01yqM9A=w1014-h538-no?authuser=2" alt="clean excel 2" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p class="withcode">按下 <code>Ctrl + Shift + ↓</code>  即可全選最末行以後所有 Rows，再按滑鼠右鍵刪除它們就行了</p>


<div class="wp-block-image">
<figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/pw/AM-JKLUiu94qMW8SH8VxnJL2Zcf8eiMdbBnt9A7NWz-X03Pczji4i3z_DU8XMPHSwS_mere-H8pq5DiYF74k009amAylrVL0_2t5TnGs7x_kpgMHg1eDSu9O4gmhBrhbSi5x9_zXGTCDML5-BbFP7BGZ-En-jQ=w972-h805-no?authuser=2" alt="clean excel 3" title="分拆 Excel 成多個檔案 ( Split A Excel to Files)"></figure></div>


<p>有時肥大但資料量不多的 Excel，使用上面這招就能輕鬆減肥！文章有幫上忙的話，歡迎分享給身邊有需要的朋友喔～！</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/9061/split-a-excel-to-files/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</title>
		<link>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/</link>
					<comments>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Fri, 29 Nov 2019 05:34:06 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[寫入 xls]]></category>
		<category><![CDATA[2020]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[jxl]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[2019]]></category>
		<category><![CDATA[xlsx]]></category>
		<category><![CDATA[Apache POI]]></category>
		<category><![CDATA[讀取 xlsx]]></category>
		<category><![CDATA[寫入 excel]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=6723</guid>

					<description><![CDATA[<p>之前寫過一篇 Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI，記錄用 POI 讀取 Excel 的教學，這篇要補足「寫入」的教學。 小蛙會切割成幾個步驟來講（還&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前寫過一篇 <a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a>，記錄用 POI 讀取 Excel 的教學，這篇要補足「寫入」的教學。</p>



<span id="more-6723"></span>



<p>小蛙會切割成幾個步驟來講（還沒有下載跟導入 POI 的話，請先看<a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">前一篇</a>）</p>



<ul class="my-li bg-darkblue wp-block-list"><li>開啟 Excel：<a href="#exist">讀入既有的</a>、<a href="#new">建立新的</a></li><li><a href="#data">設定儲存格資料</a></li><li><a href="#writeout">寫出 Excel</a></li></ul>



<p>小蛙最近要用到，之前都是這樣子寫，但是後來發現當要寫的資料大到一定程度的時候，這樣的寫法會出問題，所以最後面會加映<a href="#mass">寫出大量資料</a>時候的作法，不過其實也可以直接用最後面的那種做法就好了！</p>



<h2 class="para wp-block-heading" id="exist">開啟 Excel &#8211; 讀入既有的</h2>



<p>程式碼如下，直接看應該不難看懂，多寫 .xls 跟 .xlsx 的判斷，如果自己使用的狀況有固定，就不需要多做這一步驟，直接去建立 xls 對應的 <code>HSSFWorkbook</code> 或 xlsx 對應的 <code>XSSFWorkbook</code>。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 讀取既有的
String path = "要匯出的檔案 e.g. C:\\測試.xlsx";
Workbook wb = null;
String extString = path.substring(path.lastIndexOf("."));
InputStream is = new FileInputStream(path);
if(".xls".equals(extString)){
   wb = new HSSFWorkbook(is);
}else if(".xlsx".equals(extString)){
   wb = new XSSFWorkbook(is);
}</pre>



<h2 class="para wp-block-heading" id="new">開啟 Excel &#8211; 建立新的</h2>



<p>如果本來沒有這個檔案就要用這段，先直接 new 出對應的 Workbook，在後面的步驟再把 Excel 寫出。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 開新檔案
String path = "要匯出的檔案 e.g. C:\\測試.xlsx";
Workbook wb = null;
String extString = path.substring(path.lastIndexOf("."));
if(".xls".equals(extString)){
    wb = new HSSFWorkbook();
}else if(".xlsx".equals(extString)){
    wb = new XSSFWorkbook();
}else{
    System.out.println("無效檔案");
    return;
}</pre>



<h2 class="para wp-block-heading" id="data">設定儲存格資料</h2>



<p>POI 對 Excel 的處理脈絡是這樣，先有一個 Workbook，把他看成是一個 Excel，下一層是頁籤 Sheet，再下一層是橫的 Row，最後就是儲存格 Cell，前面的步驟我們建立(取得)了 Workbook，下一步就是要建立 Sheet &gt; Row &gt; Cell，只要記住這個順序很快就可以把自己要寫的資料設定好了，下面的程式碼是把九九乘法表輸出到 Excel 裡。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 設定儲存格資料
Sheet sheet = wb.createSheet(); 
Row row = null;
Cell cell = null;
for(int r = 0; r &lt; 9; r++){
    row = sheet.createRow(r);
    for(int c = 0; c &lt; 9; c++){
        cell = row.createCell(c);
	cell.setCellValue(
            (c + 1) + " x " + (r + 1) + " = " + ((r + 1) * (c + 1))
        );
    }
}</pre>



<h2 class="writeout wp-block-heading">寫出 Excel</h2>



<p>內容都設置好之後，最後一個步驟就是把這些變動寫到 Excel 檔案上啦！</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 寫出 Excel
try {
    FileOutputStream fos = new FileOutputStream(new File(path));
    wb.write(fos);
    fos.flush();
    fos.close();
} catch (IOException e) {
    e.printStackTrace();
}</pre>



<p>到這邊就結束了！很簡單吧！上面全部組合起來應該就可以動了。</p>



<h2 class="para wp-block-heading" id="mass">處理大量資料</h2>



<p>如果資料量非常大的話，以小蛙的狀況來說要寫的資料量超過 3000 筆的時候，就會一直噴 <code>Exception in thread "main" java.lang.OutOfMemoryError: Java heap space</code> 的錯誤，Google 查了一些資料發現除了上面提到的 <code>HSSFWorkbook</code> 跟 <code>XSSFWorkbook</code> 之外，還有一個叫做 <code>SXSSFWorkbook</code> 的類別。</p>



<p><code>SXSSFWorkbook</code> 的運作方式跟 <code>HSSFWorkbook</code> 及 <code>XSSFWorkbook</code> 不同，<code>SXSSFWorkbook</code> 會先以「暫存檔」的方式寫回硬碟，最後輸出的時候再把他們存回 Excel 裡面，這樣一來就不會出現 Out Of Memory 的問題啦！不過如果內容處理沒弄好也還是會 OOM 就是～附上相關程式碼。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 大量資料用 SXSSFWorkbook
String path      = "要匯出的檔案 e.g. C:\\測試.xlsx";
// 設定幾筆之後，就先寫到硬碟的暫存檔
SXSSFWorkbook wb = new SXSSFWorkbook(100);
Sheet sheet      = wb.createSheet();
FileOutputStream fileOut = new FileOutputStream(path);	
Row row   = null;
Cell cell = null;
for(int r = 0; r &lt; 9; r++){
    row = sheet.createRow(r);
    for(int c = 0; c &lt; 9; c++){
        cell = row.createCell(c);
        cell.setCellValue(
            (c + 1) + " x " + (r + 1) + " = " + ((r + 1) * (c + 1)));
    }
}
wb.write(fileOut);
fileOut.flush();
fileOut.close();
wb.dispose();</pre>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 寫入 Excel 文件(xls, xlsx) – 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/6723/java-%e5%af%ab%e5%85%a5-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Excel 使用 POI 讀取文字格式日期卻變成數字的問題</title>
		<link>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/</link>
					<comments>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 20 Nov 2019 06:09:29 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[技巧分享]]></category>
		<category><![CDATA[日期轉文字]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[Apache POI]]></category>
		<category><![CDATA[poi]]></category>
		<category><![CDATA[日期格式]]></category>
		<category><![CDATA[文字]]></category>
		<category><![CDATA[自訂]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=6550</guid>

					<description><![CDATA[<p>之前就有遇過類似的問題了，這次遇到的不太一樣，也用了很奇怪的處理方式，不知道正規怎麼處理，先記錄下來下次再遇到就知道怎麼處理了。 今天小蛙要用 POI 讀取的 Excel 遇到一個日期問題，以往要讀取&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>之前就有遇過類似的問題了，這次遇到的不太一樣，也用了很奇怪的處理方式，不知道正規怎麼處理，先記錄下來下次再遇到就知道怎麼處理了。</p>



<span id="more-6550"></span>



<p>今天小蛙要用 <a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">POI 讀取</a>的 Excel 遇到一個日期問題，以往要讀取的日期欄位格式大部份是固定的，如果是這種固定的狀況就可以直接用 TEXT 寫定或是讀取進來之後再做轉換，但這次要讀取的欄位裡有各式各樣的內容，因此沒辦法這樣處理。</p>



<h2 class="para wp-block-heading">問題</h2>



<p>如下圖，要讀取的儲存格為「1990-03-17」，但實際內容是上面的 1990/3/17，而格式是「自訂」，所以實際內容是 1990/3/17，指示設定顯示為 1990-03-17，透過 POI 讀出來之後會變成 32949 &#8230;</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/b0ITDAeqTe1lz8vFh02Fsa5ql3IG2mOn1a4IlIzeo96n2YIMuXtnL-IxSYlPhckAXB8IJzHl_eYeTkMoegQfwA24NPGhiN3_IVMIu57sJ-lvpzf49gLlvmU15-qP6ueiacx_2XWV6irSp9Qct90HrPPvEE2IWJKHNmppDEBWTNYAA4im-BSfox-fA8NNWIftFvT1FuIW0WJ9R9zWV6LhNqOneu-4J7JwJt6lKxoJhJ3VTbQDiA_TDFeWrTaRujWGKXEjxQ7XvWJgAs9K8Ts_HCiwGTpCtz2Xf94SPu9h4RYFwqPQOzrr8XEHIMam02394l9_J7WD-3BP7PNqnBr4rdmk7CO5bk6MH5zMyGCjDeGXdJEvt48trk3cutt5p1o8bLXuWpbQe7zNd5X0RfSSsQLik1BWBH3rznnvS94GiBWzkN56RVjz4Fz1BmFjqTYHnTcsUcukBJqsUUJPzTeMBsQXaR0WVUL1tTlnvheIRMedCXvUDRYVY-15DApGxzDfw8PSwDtLtDopJd6ZtGg4OsQnUxzltj1CDtUe7q0-HONSVP6WObeYuo_hATtWGrTecSr4IZTo3Exo2RsYHmkR2P0tDF_7eskunoGbcEeZOlkN0lbA4gM9wysLt13xlUUcSYvNZ8v36YEchajYrUktcsiVbEq32XusC5oGW7DgckbJwHZ7Sx42ghDZ9ImzfbwJHsoNGM5Idr8ygv07MuDjmk8Fa0qK9JSoLEtlf6g7cq5m74lP=w168-h120-no" alt="b0ITDAeqTe1lz8vFh02Fsa5ql3IG2mOn1a4IlIzeo96n2YIMuXtnL IxSYlPhckAXB8IJzHl eYeTkMoegQfwA24NPGhiN3 IVMIu57sJ lvpzf49gLlvmU15 qP6ueiacx 2XWV6irSp9Qct90HrPPvEE2IWJKHNmppDEBWTNYAA4im BSfox fA8NNWIftFvT1FuIW0WJ9R9zWV6LhNqOneu 4J7JwJt6lKxoJhJ3VTbQDiA TDFeWrTaRujWGKXEjxQ7XvWJgAs9K8Ts HCiwGTpCtz2Xf94SPu9h4RYFwqPQOzrr8XEHIMam02394l9 J7WD 3BP7PNqnBr4rdmk7CO5bk6MH5zMyGCjDeGXdJEvt48trk3cutt5p1o8bLXuWpbQe7zNd5X0RfSSsQLik1BWBH3rznnvS94GiBWzkN56RVjz4Fz1BmFjqTYHnTcsUcukBJqsUUJPzTeMBsQXaR0WVUL1tTlnvheIRMedCXvUDRYVY 15DApGxzDfw8PSwDtLtDopJd6ZtGg4OsQnUxzltj1CDtUe7q0 HONSVP6WObeYuo hATtWGrTecSr4IZTo3Exo2RsYHmkR2P0tDF 7eskunoGbcEeZOlkN0lbA4gM9wysLt13xlUUcSYvNZ8v36YEchajYrUktcsiVbEq32XusC5oGW7DgckbJwHZ7Sx42ghDZ9ImzfbwJHsoNGM5Idr8ygv07MuDjmk8Fa0qK9JSoLEtlf6g7cq5m74lP=w168 h120 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"></figure></div>



<p>如果把儲存格的格式直接設定成「文字」，然後儲存格就直接變成 32949 了 &#8230; </p>



<h2 class="para wp-block-heading">小蛙處理方式</h2>



<p>如果你的 excel 真的太大，幾百萬幾千萬筆那種，還是看有沒有大大願意幫忙，小蛙這次要處理的只有幾千筆。試過很多做法最後都會變成 32949，先說如果你的儲存格內容很一致，<a rel="noreferrer noopener nofollow external" aria-label="Converting Number representation of Date in excel to Date in java (在新分頁中開啟)" href="https://stackoverflow.com/questions/19028192/converting-number-representation-of-date-in-excel-to-date-in-java" target="_blank" data-wpel-link="external" class="wpel-icon-right">Converting Number representation of Date in excel to Date in java<span class="wpel-icon wpel-image wpel-icon-6"></span></a> 或 <a href="https://www.extendoffice.com/zh-TW/documents/excel/2476-excel-convert-date-to-text-or-number.html" target="_blank" rel="noreferrer noopener nofollow external" aria-label="如何在Excel中將日期轉換為數字字符串或文本格式？  (在新分頁中開啟)" data-wpel-link="external" class="wpel-icon-right">如何在Excel中將日期轉換為數字字符串或文本格式？ <span class="wpel-icon wpel-image wpel-icon-6"></span></a>可能都可以幫上忙，只是看要從程式端處理還是從來源資料端處理。</p>



<p>因為內容不固定，用上面的方式轉出來又會延伸出其他問題，小蛙就想真正要做的事情其實是</p>



<pre class="left green">把所見的文字格式撈出來，而非實際資料
</pre>



<h3 class="para wp-block-heading">複製要處理的日期儲存格，貼上筆記本後再複製</h3>



<p>有時候複製了有格式的東西，要去除這些格式除了用「以純文字方式貼上」之外，還有一個方法就是，先貼去 Windows 內建的筆記本，一定要筆記本喔，有些文字編輯器即使你複製過去再複製出來，格式還是保留著的，Windows 內建最傳統的筆記本不支援格式，因此複製進去就會剩下純文字，再複製出來就只剩下純文字了。</p>



<h3 class="para wp-block-heading">將 excel 要貼上的儲存格設定為「文字」</h3>



<p>如果把上一部複製的資料貼回原本的 excel 儲存格中，還是會跟一開始一樣，要貼回之前先把儲存格設定成「文字」</p>



<h3 class="para wp-block-heading">貼上</h3>



<p>貼上之後再從 POI 讀取就可以讀到真正我們在 excel 中看到的內容了。</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/KFyzURE9MouVkIStM8gJQfC3QVXMlDP7h0t5NoGRMQ-kfqz1bhWfsCuWy-pRYwzF-FP9NeLRx8thinO_FhB9UrRXt0Q_opGixwnAokOk97oqOzl_DdtSwHAm_RgkqMo6W8vqELvPq4olCIQg_I7F0vkumOiSleImQzfYg4M9f1Im5d1Lza8tAcF5RVMFxoCloB3G76wLPL-p38eSnUnT-fnzHn-64k8Zv71FYYeKl5MjjVNpwComjuuF7k4m9o0jm56TywX4Hls_74nCNqu84o1TtLJ8yY8E-V3_VWKABFxNiX2r4N6aEhfc2mId4I3aOsmQsn5qQ-x-q54BIOnYLsvhya_0Sz1K8YpdNZGHySYfIDocAs9kwD50u9bsdxkNFIup-A_x_Pqz17OKiQZbSuH4RfcBkSadw-1vEXSIhdARYZkDI3RgxYCIigeO44GKrBkbAp9nrhfX8mLuDCaBv6rMEx_kHE70AHSiD851DcScsh0i0yy329E8MNNRSKSHQjZFxHJlqyV55eebW0LPwX_GG3WSWszsvNs2Zz3zXJvWAuu0lR58kaojxSDhnmA-2MKgimTessdIowOZqzUXlpw0AAweT_muKgFvlbsAh2IHR6jqrgW_JUulD-7mUoS8Lkv7UFVCI-usF14xrloOYL3zM2UQ2630yIVV4nAvHuEWhIS6tNiyj3K4YN8ANzgtboDsayIKLwwlHDxYW7Zqg0y1vJ0mIhrfB5jJh8J9-fqbQd7P=w557-h281-no" alt="KFyzURE9MouVkIStM8gJQfC3QVXMlDP7h0t5NoGRMQ kfqz1bhWfsCuWy pRYwzF FP9NeLRx8thinO FhB9UrRXt0Q opGixwnAokOk97oqOzl DdtSwHAm RgkqMo6W8vqELvPq4olCIQg I7F0vkumOiSleImQzfYg4M9f1Im5d1Lza8tAcF5RVMFxoCloB3G76wLPL p38eSnUnT fnzHn 64k8Zv71FYYeKl5MjjVNpwComjuuF7k4m9o0jm56TywX4Hls 74nCNqu84o1TtLJ8yY8E V3 VWKABFxNiX2r4N6aEhfc2mId4I3aOsmQsn5qQ x q54BIOnYLsvhya 0Sz1K8YpdNZGHySYfIDocAs9kwD50u9bsdxkNFIup A x Pqz17OKiQZbSuH4RfcBkSadw 1vEXSIhdARYZkDI3RgxYCIigeO44GKrBkbAp9nrhfX8mLuDCaBv6rMEx kHE70AHSiD851DcScsh0i0yy329E8MNNRSKSHQjZFxHJlqyV55eebW0LPwX GG3WSWszsvNs2Zz3zXJvWAuu0lR58kaojxSDhnmA 2MKgimTessdIowOZqzUXlpw0AAweT muKgFvlbsAh2IHR6jqrgW JUulD 7mUoS8Lkv7UFVCI usF14xrloOYL3zM2UQ2630yIVV4nAvHuEWhIS6tNiyj3K4YN8ANzgtboDsayIKLwwlHDxYW7Zqg0y1vJ0mIhrfB5jJh8J9 fqbQd7P=w557 h281 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"><figcaption>原本 excel 自動補成「自訂」</figcaption></figure></div>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/AJzrjXk1aETjwQgrLgByKaUgVnjmige5rbiafsD5i6rwvk9yuKNKPtdhcLQmU9T-DiKdlen4h4md0ZQh79jo_bVIgWvwkhhpHRTTPecOv5z3-IreTrI1lkRtxDU_v5gpzS6QdVe6H43FxKMWaV9Wk0lc4_lap6lURlyu_GRDUK58ZPOeX10He96HrrIphSsYKWnqAZC6hf11f-rdqkCj7sFxqzgJOi8DX6RbqaWmQf1L3JA_Xg8O-cDkJfAa-xQKo1M1XQmLlpajZfcMNYkSUOMqlfIun5InY0N3BxCQQJbbVMAsoU2iHUAhb2rqHYLLeC9MDGEuAEHHHVPXlL_AG4s2ibKfUZZfF5O5g9ZgL3LqViWZ-awp7XtQj1ebywviRwgG6EMPz1hBlNfY1xnnP-shswL90v2Vrn7TboV84W8-4w5NcdR_Tpc-sXlpNgM6XAEV5HZ0oS4C2lWAnpNZyTexOLG3K2YqGd6_t2nSfhd1eRD5Df4bXrCxh5AE08xZ0ptYSTeadQ9b6mgF1ERz6R4rWH2V9XY5-yT6l9plzdsAlwrogHjWeJBsHFwceM4lHZ6e409IyU0GIqUVHUPWT_b5jaolIwlv_QMhvbA0mNzpCx6BnEAEDgnCQfD2LQ9C-OHptVGvLB7HZ5J7LK6PdNWbEBFvZD76qtjfmfq08i2yfdSum02c3Fuhp0gWaGtl4NT-9QDyQe9RUI6utN4fPOdVijhOhG8yudP7XcbaKHz7lYGC=w560-h346-no" alt="AJzrjXk1aETjwQgrLgByKaUgVnjmige5rbiafsD5i6rwvk9yuKNKPtdhcLQmU9T DiKdlen4h4md0ZQh79jo bVIgWvwkhhpHRTTPecOv5z3 IreTrI1lkRtxDU v5gpzS6QdVe6H43FxKMWaV9Wk0lc4 lap6lURlyu GRDUK58ZPOeX10He96HrrIphSsYKWnqAZC6hf11f rdqkCj7sFxqzgJOi8DX6RbqaWmQf1L3JA Xg8O cDkJfAa xQKo1M1XQmLlpajZfcMNYkSUOMqlfIun5InY0N3BxCQQJbbVMAsoU2iHUAhb2rqHYLLeC9MDGEuAEHHHVPXlL AG4s2ibKfUZZfF5O5g9ZgL3LqViWZ awp7XtQj1ebywviRwgG6EMPz1hBlNfY1xnnP shswL90v2Vrn7TboV84W8 4w5NcdR Tpc sXlpNgM6XAEV5HZ0oS4C2lWAnpNZyTexOLG3K2YqGd6 t2nSfhd1eRD5Df4bXrCxh5AE08xZ0ptYSTeadQ9b6mgF1ERz6R4rWH2V9XY5 yT6l9plzdsAlwrogHjWeJBsHFwceM4lHZ6e409IyU0GIqUVHUPWT b5jaolIwlv QMhvbA0mNzpCx6BnEAEDgnCQfD2LQ9C OHptVGvLB7HZ5J7LK6PdNWbEBFvZD76qtjfmfq08i2yfdSum02c3Fuhp0gWaGtl4NT 9QDyQe9RUI6utN4fPOdVijhOhG8yudP7XcbaKHz7lYGC=w560 h346 no Excel 使用 POI 讀取文字格式日期卻變成數字的問題" title="Excel 使用 POI 讀取文字格式日期卻變成數字的問題"><figcaption>處理完之後的，是「文字」而且沒有被轉成 32949</figcaption></figure></div>



<p>如果有更正規或更好的方法的大大，歡迎留言給小蛙，感恩！</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</title>
		<link>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/</link>
					<comments>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Sun, 01 Sep 2019 14:08:37 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[讀取 excel]]></category>
		<category><![CDATA[讀取 xls]]></category>
		<category><![CDATA[讀取 xlsx]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[jxl]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[2019]]></category>
		<category><![CDATA[xlsx]]></category>
		<category><![CDATA[Apache POI]]></category>
		<guid isPermaLink="false">https://noter.tw/?p=4300</guid>

					<description><![CDATA[<p>小蛙很久很久以前發過一篇 Java + Excel = JXL，主要講解怎麼用 Java 處理 Excel，當時使用的是 jxl 這個套件，不過這個套件有一個很大的問題，就是只能處理 xls 的檔案，&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>小蛙很久很久以前發過一篇 <a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a>，主要講解怎麼用 Java 處理 Excel，當時使用的是 jxl 這個套件，不過這個套件有一個很大的問題，就是只能處理 xls 的檔案，xlsx 沒有辦法處理，這篇要介紹的 Apache POI 則可以用來處理 xls 跟 xlsx。</p>



<span id="more-4300"></span>



<h2 class="para wp-block-heading">使用套件</h2>



<p>小蛙這邊說明自己下載 jar 的方式，首先到這邊下載 Apache POI，下載回來解壓縮之後，會得到一堆 jar，最簡單最簡單就是先把下面這些 jar 通通引入</p>



<div class="wp-block-image"><figure class="aligncenter"><img decoding="async" src="https://lh3.googleusercontent.com/WRuQRobKQHsBNDNGAu-ZQAPuFxdxMafOhWD24n5RRGr8Rleyevn7uBeNq_V0hiv2S7a_x0Ep3rLAzcTUoVK2aMzWHIpedbNVtCc_8n_X2Xn6fWAitA2vgpLLGF7Eagd9LQLFJ0mS13_3P8iCkWis6jZYUEwqmoUtlxOWTFpPhMlD84paCnn0MqdNaJOIvJETCySq9jHmK00L70TurnGhEXL1xBWXDJtgzaVWBpHqCaAW4CWmqs4C6rjfx409vYqrWrsbLNU5pJhZVk0_GyQJF1IG_JVeJ9nbV4GHX22fWY-2xRZngywqKBxpOl5be6uHnSAUMaYH0k3PSvPuMguKR86XaZS6E5r4AY5exf6TfhnTV3SMOgqfBJJpEdciSjPpUL8YbHmubVOJRRXjt7MSYDinLjjlwp953vNuW4s4zeDAzD4hqYw-IhJvniAfSTf2T2dqiEyFBXfFEE3BrlPBLeTFUsArgN2PEpTu30DZeBdLbEmzHVSJBn0INxd7B73Mmhhxa_IR3SSqKS-gM0zd_HsEWNwdrWSNF34yHJh0Yw9b89h_LqA-YBuUDGEfVqlvrFuDVu8-TqEOC8ANNKxllJSm0gJM8vEwQnhHRKdmL3GfI5L3LNClcJE7MkZmCCrNxk2ZmPWPV2pDdtBfRCg4WKsg-8HhEbkFbYtFUdQoislhgWDaphAIg5p9ewVldyfLh3rdpE0Yar9rHKbtIyBGcj6m3bT-hg3jz8_OzedgEyfRDimy=w401-h282-no" alt="WRuQRobKQHsBNDNGAu ZQAPuFxdxMafOhWD24n5RRGr8Rleyevn7uBeNq V0hiv2S7a x0Ep3rLAzcTUoVK2aMzWHIpedbNVtCc 8n X2Xn6fWAitA2vgpLLGF7Eagd9LQLFJ0mS13 3P8iCkWis6jZYUEwqmoUtlxOWTFpPhMlD84paCnn0MqdNaJOIvJETCySq9jHmK00L70TurnGhEXL1xBWXDJtgzaVWBpHqCaAW4CWmqs4C6rjfx409vYqrWrsbLNU5pJhZVk0 GyQJF1IG JVeJ9nbV4GHX22fWY 2xRZngywqKBxpOl5be6uHnSAUMaYH0k3PSvPuMguKR86XaZS6E5r4AY5exf6TfhnTV3SMOgqfBJJpEdciSjPpUL8YbHmubVOJRRXjt7MSYDinLjjlwp953vNuW4s4zeDAzD4hqYw IhJvniAfSTf2T2dqiEyFBXfFEE3BrlPBLeTFUsArgN2PEpTu30DZeBdLbEmzHVSJBn0INxd7B73Mmhhxa IR3SSqKS gM0zd HsEWNwdrWSNF34yHJh0Yw9b89h LqA YBuUDGEfVqlvrFuDVu8 TqEOC8ANNKxllJSm0gJM8vEwQnhHRKdmL3GfI5L3LNClcJE7MkZmCCrNxk2ZmPWPV2pDdtBfRCg4WKsg 8HhEbkFbYtFUdQoislhgWDaphAIg5p9ewVldyfLh3rdpE0Yar9rHKbtIyBGcj6m3bT hg3jz8 OzedgEyfRDimy=w401 h282 no Java 讀取 Excel 文件(xls, xlsx) - 使用 Apache POI" title="Java 讀取 Excel 文件(xls, xlsx) - 使用 Apache POI"></figure></div>



<p>通通引入之後，小蛙放上參考網路上資料後，改成自己適用的功能片段，主要作法是先讀取 Excel 裡的所有資料丟到 List&lt;List&lt;String&gt;&gt; 裡面，再透過操作 List&lt;List&lt;String&gt;&gt; 的資料達到目的，當然也可以改成最直觀的方式，直接讀取特定欄位直接做處理。（不一定要用這種全部讀出來再去處理的方式，也可以直接一格一格讀出來處理），下面只是列出一些 function，把它改成自己需要的方式就可以了。</p>



<p>操作流程大概是這樣 </p>



<ul class="wp-block-list"><li><a href="#read">讀取 xls / xlsx 檔案</a></li><li><a href="#sheet">讀取 sheet</a></li><li><a href="#rowcol">遍尋 rows（橫的）遍尋 columns（直的）</a></li><li><a href="#conv">讀取儲存格資料並根據類型做轉換</a></li></ul>



<h3 class="para wp-block-heading" id="read">讀取 xls / xlsx 檔案</h3>



<p>第一步就是讀取 excel 檔案，這邊多做了一件事情就是區分出 xls 跟 xlsx，用一個 if 判斷是分別 new 出 HSSFWorkbook / XSSFWorkbook 物件。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 從路徑中讀取 Excel
default Workbook getWorkbook(String path) throws FileNotFoundException, IOException {
	Workbook wb = null;
	if(path == null) return null;
	String extString = path.substring(path.lastIndexOf("."));
	InputStream is = new FileInputStream(path);
	if(XLS.equals(extString)){
	    wb = new HSSFWorkbook(is);
	}else if(XLSX.equals(extString)){
	    wb = new XSSFWorkbook(is);
	}
	return wb;
}</pre>



<h3 class="para wp-block-heading" id="sheet">讀取 sheet</h3>



<p>從上面取得的 workbook 中，讀取特定頁籤，這個 sheetNo 從 0 開始計算，也就是說第一個頁籤的話要傳入 0，第二個頁籤傳入 1，以此類推。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 讀取要用的 Sheet
default Sheet getSheet(Workbook workbook, int sheetNo){
	return workbook.getSheetAt(sheetNo);
}</pre>



<h3 class="para wp-block-heading" id="rowcol">遍尋 rows（橫的）遍尋 columns（直的）</h3>



<p>這邊跟 jxl 比較不同的地方在於，必須先把 row 取出來，然後取得最後一個 row 跟最後一個 column，要注意的是取得 colnum 的時候，要先判斷取出的 row 是不是 null，不然會噴錯喔！（小蛙這邊懶得改了，自己要記得加上判斷喔），以及 index 都是從 0 開始計算，然後每一格儲存格取出的資料都放在 List&lt;List&lt;String&gt;&gt;。中間 readCell 部份內容請往下看。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 把所有欄位讀出成 List&lt;List&lt;String&gt;&gt;
default List&lt;List&lt;String&gt;&gt; readFields(Workbook workbook, int sheetNo, int firstRow, int firstCol) throws Exception {
	Sheet sheet = workbook.getSheetAt(sheetNo);
	Row row = sheet.getRow(0); 
	int rownum = sheet.getPhysicalNumberOfRows();
	int colnum = row.getPhysicalNumberOfCells();
	List&lt;List&lt;String&gt;&gt; list = new ArrayList&lt;&gt;();
	List&lt;String&gt; _inner;
	for(int i = firstRow; i &lt; rownum; i++){
		row = sheet.getRow(i);
		 _inner = new ArrayList&lt;&gt;();
		if(row != null){
			for(int j = firstCol; j &lt; colnum; j++){
				_inner.add(readCell(row.getCell(j)));
			}
			list.add(_inner);
		}else{
			break;
		}
	}
	return list;
}</pre>



<h3 class="para wp-block-heading" id="conv">轉換型態</h3>



<p>跟 jxl 不一樣的部份是，jxl 可以直接取得字串型態的資料，但是 poi 必須根據不同的形態來呼叫不同的方法取得內容，下面是參考網路上看到的程式碼做的修改，原始來源不太記得了，大致上符合小蛙的需求，可以直接複製回去，再依自己的需求修改。</p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 小蛙自己要吐出的格式
default String readCell(Cell cell){
	return (String) getCellFormatValue(cell);
}
default Object getCellFormatValue(Cell cell){
	Object cellValue = null;
        if(cell!=null){
            switch(cell.getCellType()){
	            case NUMERIC:
	            	cellValue 	= df.format(cell.getNumericCellValue());  
	                break;
	            case FORMULA:
	                if(DateUtil.isCellDateFormatted(cell)){
	                    cellValue = cell.getDateCellValue();
	                }else{
	                    cellValue = String.valueOf(cell.getNumericCellValue());
	                }
	                break;
	            case STRING:
	                cellValue = cell.getRichStringCellValue().getString();
	                break;
	            default:
	                cellValue = "";
            }
	    }else{
            cellValue = "";
        }
	return cellValue;
}</pre>



<p>打完收工，把這些 code 改成自己需求之後組合起來應該就可以順利動囉！</p>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) &#8211; 使用 Apache POI</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Oracle 匯入/匯出 Excel (透過 SQL Developer)</title>
		<link>https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/</link>
					<comments>https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/#comments</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 13 Mar 2013 07:28:51 +0000</pubDate>
				<category><![CDATA[資料庫]]></category>
		<category><![CDATA[SQL Developer]]></category>
		<category><![CDATA[xls]]></category>
		<category><![CDATA[匯入]]></category>
		<category><![CDATA[匯出]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[Oracle]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=2711</guid>

					<description><![CDATA[<p>昨天碰到一個情況，內容單位希望自己可以有辦法匯入匯出資料庫，不用每次都要透過技術組支援，這件事其實有好有壞，好的是內容單位可以自己處理很多事物，避免時程的耽擱；麻煩的地方在於，如果匯入的時候發生了什麼&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>昨天碰到一個情況，內容單位希望自己可以有辦法匯入匯出資料庫，不用每次都要透過技術組支援，這件事其實有好有壞，好的是內容單位可以自己處理很多事物，避免時程的耽擱；麻煩的地方在於，如果匯入的時候發生了什麼問題，到時候技術組可能會更頭痛，不過既然內容單位有了這樣的要求，小蛙就順手把文件記錄在這！ </p>



<span id="more-2711"></span>



<p>這裡使用的是<strong> Oracle SQL Developer</strong> 官方免費 Client，下載及設定可參考<a rel="noreferrer noopener nofollow external" href="http://wazai.net/2714/%e5%ae%98%e6%96%b9-client-oracle-sql-developer-%e5%ae%89%e8%a3%9d%e6%95%99%e5%ad%b8" target="_blank" data-wpel-link="external" class="wpel-icon-right">這裡<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。直接上圖 + 說明！ </p>



<h2 class="para wp-block-heading"> 【資料匯出成 Excel】 </h2>



<p>開啟 Oracle SQL Developer 後，在要匯出的資料表上點選<strong>滑鼠右鍵</strong>，選擇「<strong>匯出(B)&#8230;</strong>」。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-HguTTGDVrcI/UT_1_qdI1XI/AAAAAAAAHbc/3aD3i-5oaMw/2013-1-30%252520%2525E4%2525B8%25258B%2525E5%25258D%252588%25252003-54-37.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-HguTTGDVrcI/UT_1_qdI1XI/AAAAAAAAHbc/3aD3i-5oaMw/2013-1-30%252520%2525E4%2525B8%25258B%2525E5%25258D%252588%25252003-54-37.png" alt="2013-1-30 下午 03-54-37.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>由於只是要匯出資料，取消勾選「<strong>匯出DDL(E)</strong>」，勾選「<strong>匯出資料(O)</strong>」，格式選擇「<strong>xls</strong>」，選擇存放路徑(這邊要選擇單一檔案，不然會匯出空白的excel)，編碼也要選擇正確，否則會有亂碼的情況。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-jK6XfcHirQw/UT_1_Z5lsxI/AAAAAAAAHbY/v4BWgOX25c4/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-01.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-jK6XfcHirQw/UT_1_Z5lsxI/AAAAAAAAHbY/v4BWgOX25c4/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-01.png" alt="2013-3-13 上午 11-16-01.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>確認要匯出的資料，下方還可以設定只匯出某個條件下(where)成立的資料。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-GcoKKcPIAD8/UT_1_bitSuI/AAAAAAAAHaE/KI_Qq1Bb0_w/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-10.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-GcoKKcPIAD8/UT_1_bitSuI/AAAAAAAAHaE/KI_Qq1Bb0_w/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-10.png" alt="2013-3-13 上午 11-16-10.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>完整匯出資訊。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh3.ggpht.com/-tn2TMtRmHKg/UT_1_7AwgXI/AAAAAAAAHbg/zUuuHfKbWiM/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-21.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh3.ggpht.com/-tn2TMtRmHKg/UT_1_7AwgXI/AAAAAAAAHbg/zUuuHfKbWiM/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-21.png" alt="2013-3-13 上午 11-16-21.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>點選完成後，開始匯出動作。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-T0OVujOCg9Q/UT_1_x6PaeI/AAAAAAAAHaU/g_Ar42fF_kg/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-30.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-T0OVujOCg9Q/UT_1_x6PaeI/AAAAAAAAHaU/g_Ar42fF_kg/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-16-30.png" alt="2013-3-13 上午 11-16-30.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>匯出完成可以到剛剛指定的路徑，看到剛剛匯出的 Excel。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh5.ggpht.com/-uf9QNqY_8VA/UT_8eGvR4xI/AAAAAAAAHec/I84H4qzW5jA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-37-31.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh5.ggpht.com/-uf9QNqY_8VA/UT_8eGvR4xI/AAAAAAAAHec/I84H4qzW5jA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-37-31.png" alt="2013-3-13 上午 11-37-31.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<h2 class="para wp-block-heading"> 【從 Excel 匯入資料】</h2>



<p>匯入的部份也同樣簡單，在要匯入的資料表中點選「<strong>匯入資料</strong>」，也可以直接選擇匯入資料後再選擇要匯入的資料表，小蛙在這邊建了一個TEST資料表以供匯入測試。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-8BSdGFYLW0Q/UT_2AIjeNhI/AAAAAAAAHbk/Zay4VegSq6Y/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-21-43.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-8BSdGFYLW0Q/UT_2AIjeNhI/AAAAAAAAHbk/Zay4VegSq6Y/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-21-43.png" alt="2013-3-13 上午 11-21-43.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>選擇要匯入的 Excel 檔案。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh3.ggpht.com/-mJxSdQYchIE/UT_2AevGXHI/AAAAAAAAHao/Now6FPgJU0g/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-11.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh3.ggpht.com/-mJxSdQYchIE/UT_2AevGXHI/AAAAAAAAHao/Now6FPgJU0g/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-11.png" alt="2013-3-13 上午 11-22-11.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>預覽要匯入的資料，看看從 excel 載入的資料正不正確，有沒有亂碼 &#8230; 等。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh5.ggpht.com/-U8UJOfcoU3U/UT_2AlsbddI/AAAAAAAAHak/NdvfF_OnXdM/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-20.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh5.ggpht.com/-U8UJOfcoU3U/UT_2AlsbddI/AAAAAAAAHak/NdvfF_OnXdM/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-20.png" alt="2013-3-13 上午 11-22-20.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>匯入方法選擇「<strong>插入</strong>」 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh5.ggpht.com/-tZZwL9XXCCU/UT_2AoUj9nI/AAAAAAAAHa0/qFdut9ZsdwY/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-26.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh5.ggpht.com/-tZZwL9XXCCU/UT_2AoUj9nI/AAAAAAAAHa0/qFdut9ZsdwY/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-26.png" alt="2013-3-13 上午 11-22-26.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>這邊預設應該會全部先幫使用者選好，如果沒有的話，也可以自己選擇哪些欄位是要匯入的。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh5.ggpht.com/-_N2FLunOZu4/UT_8dcjQ3sI/AAAAAAAAHeY/4V-be3FFbyA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-31.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh5.ggpht.com/-_N2FLunOZu4/UT_8dcjQ3sI/AAAAAAAAHeY/4V-be3FFbyA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-31.png" alt="2013-3-13 上午 11-22-31.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>選擇欄位對應，如果這邊匯入跟匯出都有勾選表頭的話，會自動使用表頭的欄位名稱來進行對應，否則要自己一一核對。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh4.ggpht.com/-f9RK0FgfAf4/UT_2BKTM8eI/AAAAAAAAHa8/v9YBoomkhoo/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-39.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh4.ggpht.com/-f9RK0FgfAf4/UT_2BKTM8eI/AAAAAAAAHa8/v9YBoomkhoo/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-39.png" alt="2013-3-13 上午 11-22-39.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>真正匯入資料之前，可以點選「驗證」來看看這次的匯入匯不會有問題，如下圖提示在日期欄位發生錯誤。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh6.ggpht.com/-hAiR24E6EwM/UT_8d957MKI/AAAAAAAAHc4/mk6mQDY7H7k/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-58.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh6.ggpht.com/-hAiR24E6EwM/UT_8d957MKI/AAAAAAAAHc4/mk6mQDY7H7k/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-22-58.png" alt="2013-3-13 上午 11-22-58.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>確認無誤，點選完成後開始匯入。 </p>


<div class="wp-block-image">
<figure class="aligncenter"><a href="http://lh4.ggpht.com/-KaMdXlCA-fQ/UT_2BpZWXZI/AAAAAAAAHbM/RL7DimoDyDA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-32-05.png" target="_blank" rel="noopener nofollow external noreferrer" data-wpel-link="external"><img decoding="async" src="//lh4.ggpht.com/-KaMdXlCA-fQ/UT_2BpZWXZI/AAAAAAAAHbM/RL7DimoDyDA/2013-3-13%252520%2525E4%2525B8%25258A%2525E5%25258D%252588%25252011-32-05.png" alt="2013-3-13 上午 11-32-05.png" title="Oracle 匯入/匯出 Excel (透過 SQL Developer)"></a></figure></div>


<p>打完收工！ </p>



<p><strong>Oracle 系列文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/11178/%e4%bf%ae%e6%94%b9-oracle-sequence/" data-wpel-link="internal">修改 Oracle Sequence</a><a href="https://noter.tw/2371/oracle-%e5%8c%af%e5%85%a5-sql-%e6%aa%94%e6%a1%88/" data-wpel-link="internal"></a></li><li><a href="https://noter.tw/2371/oracle-sqlplus-import-sql-file/" data-wpel-link="internal">Oracle 使用 sqlplus 匯入 SQL 檔案</a></li><li><a href="https://noter.tw/9109/oracle-sqlplus-export-results-to-file/" data-wpel-link="internal">使用 Oracle sqlplus 將查詢結果匯出到檔案</a></li><li><a href="https://noter.tw/2714/%e5%ae%98%e6%96%b9-client-oracle-sql-developer-%e5%ae%89%e8%a3%9d%e6%95%99%e5%ad%b8/" data-wpel-link="internal">官方 Client – Oracle SQL Developer 安裝教學</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li></ul>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/feed/</wfw:commentRss>
			<slash:comments>3</slash:comments>
		
		
			</item>
		<item>
		<title>JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</title>
		<link>https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/</link>
					<comments>https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Wed, 28 Dec 2011 15:42:01 +0000</pubDate>
				<category><![CDATA[網頁後端]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[JExcelApi]]></category>
		<category><![CDATA[jxl]]></category>
		<category><![CDATA[excel下載]]></category>
		<category><![CDATA[html to excel]]></category>
		<category><![CDATA[JSP]]></category>
		<guid isPermaLink="false">http://wazai.net/?p=1732</guid>

					<description><![CDATA[<p>這篇文章小蛙要記錄如何在JSP中使用JExcelApi(jxl)操作Excel並且提供下載的功能，例如查詢完的列表讓使用者可以直接下載存成Excel。小蛙原本寫了一種透過File的方法產生，不過缺點就&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>這篇文章小蛙要記錄如何在JSP中使用JExcelApi(jxl)操作Excel並且提供下載的功能，例如查詢完的列表讓使用者可以直接下載存成Excel。小蛙原本寫了一種透過File的方法產生，不過缺點就是時間久了會有很多廢棄的檔案(因為每次下載都會存成一個xls)，必須透過crontab或是手動定期清理。之後在<a rel="noreferrer noopener nofollow external" href="http://blog.xuite.net/syang.phon/photobox/19700170" target="_blank" data-wpel-link="external" class="wpel-icon-right"><strong>Jsp利用jxl匯出資料至Excel並下載 @ Ken™ KM</strong><span class="wpel-icon wpel-image wpel-icon-6"></span></a>看到更好的方法，可以動態產生並且直接提供下載，也就不會有上述的問題了。</p>



<span id="more-1732"></span>



<p><a rel="noreferrer noopener nofollow external" href="http://wazai.net/1569/java-excel-jxl" target="_blank" data-wpel-link="external" class="wpel-icon-right">Java + Excel = JXL<span class="wpel-icon wpel-image wpel-icon-6"></span></a>小蛙在這篇文章中記錄了在Java中如何透過jxl讀取Excel檔案，這篇文章則是記錄如何寫入Excel檔案。會出現這篇文章完全是一個意外，原本這個工作是由另一位同事負責，結果那位同事連續請假兩天，而恰好小蛙是他的組長，另一個原因是，晚上快六點的時候，小蛙的組長才跟小蛙說隔天中午前要處理好，下午對方要做驗收的動作，所以小蛙只好回到家繼續趕工。累了，不囉嗦直接進正題，老規矩只記錄用到的部份，對jxl有興趣的網友們，請見諒，可能要自行查找jxl document喔！</p>



<h2 class="para wp-block-heading">操作寫入Excel檔案(不含直接下載)</h2>



<p>這邊必須先有一個 WritableWorkbook 物件公我們操作(讀取的時候我們使用的是 Workbook 物件)，接著是 WritableSheet(讀取的時候是 Sheet)，建立完 WritableWorkbook 及 WritableSheet 之後就開始一個 cell 一個 cell 塞資料，這邊小蛙只有用到字串類型的文字，所以只採用 Label 即可。</p>


<pre>&lt;%@ page language="java" contentType="text/html; charset=utf-8" %&gt;
&lt;%@ page import="java.util.*" %&gt;
&lt;%@ page import="java.io.*" %&gt;
&lt;%@ page import="java.text.*" %&gt;
&lt;%@ page import="jxl.*" %&gt;
&lt;%@ page import="jxl.write.*" %&gt;
&lt;%@ page import="jxl.write.biff.RowsExceededException" %&gt;
&lt;%!
// 參考資料 http://www.blogjava.net/chenlb/archive/2007/10/29/156613.html
private void putRow(WritableSheet ws, int rowNum, ArrayList cells) throws RowsExceededException, WriteException {
    for(int j=0; j &lt; cells.size(); j++) {
      // 建立每個cell物件，這邊只用了Label
      Label cell = new Label(j, rowNum, ""+cells.get(j));
        // 塞入Cell中
        ws.addCell(cell);
      }
}
%&gt;
&lt;%
File f = null;
try{
    // 只是用來產生檔名
    long sysTime = System.currentTimeMillis();
    java.util.Date date = new java.util.Date();
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
    String dateString = sdf.format(date) + sysTime + ".xls";
    String path = application.getRealPath("");
    f = new File(path + "/upload/" + dateString);
    if(!f.exists()){
        // 建立excel檔案(空檔案，供jxl操作)
        f.createNewFile();
    }
    WritableWorkbook workbook = Workbook.createWorkbook(f);
    WritableSheet sheet = workbook.createSheet("Sheet1", 0);
    int rowNum = 0;
    // ... 資料庫讀取部份略過 ...
    while(rs.next()){
        // 建立一個ArrayList儲存每個Record的資料
        ArrayList list = new ArrayList();
        list.add(rs.getString("name");
        ...
        // 實際塞資料
        putRow(sheet, rowNum, list);
        // 用來控制行數
        rowNum++;
    }
    // 這兩行一定不能少，不然寫的資料會消失
    workbook.write();
    workbook.close();
}catch(Exception e){
  out.print(e);
}
%&gt;</pre>
<p> </p>
<ul>
<li><span style="color: #ff0000;"><strong>操作寫入Excel並直接下載</strong></span></li>
</ul>
<p style="padding-left: 30px;">這邊是透過將Excel直接輸出到OutputStream，再透過response.setHeader達到下載的目的，直接看code。</p>
<pre>&lt;%@ page language="java" contentType="text/html; charset=utf-8" %&gt;
&lt;%@ page import="java.util.*" %&gt;
&lt;%@ page import="java.io.*" %&gt;
&lt;%@ page import="jxl.*" %&gt;
&lt;%@ page import="jxl.write.*" %&gt;
&lt;%@ page import="jxl.write.biff.RowsExceededException" %&gt;
&lt;%!
    private void putRow(WritableSheet ws, int rowNum, ArrayList cells) throws RowsExceededException, WriteException {
        for(int j=0; j&amp;lt;cells.size(); j++) {
            Label cell = new Label(j, rowNum, ""+cells.get(j));
            ws.addCell(cell);
        }
    }
%&gt;
&lt;%
try{
    // 直接下載最重要的兩行
    response.reset();     
    response.setHeader("Content-disposition","attachment; filename=fileName.xls");
    OutputStream os = response.getOutputStream();
    WritableWorkbook workbook = Workbook.createWorkbook(os);
    WritableSheet sheet = workbook.createSheet("Sheet1", 0);
    // ... 資料庫操作省略 ...
    int rowNum = 0;
    while(rs.next()){
        ArrayList list = new ArrayList();
        list.add(rs.getString("name"));
        ....
        putRow(sheet, rowNum, list);
        rowNum++;
    }
    workbook.write();
    workbook.close();
    os.flush();
    os.close();
}catch(Exception e){
    out.print(e);
}
%&gt;</pre>


<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Java + Excel = JXL</title>
		<link>https://noter.tw/1569/java-excel-jxl/</link>
					<comments>https://noter.tw/1569/java-excel-jxl/#respond</comments>
		
		<dc:creator><![CDATA[黃小蛙]]></dc:creator>
		<pubDate>Mon, 19 Dec 2011 14:12:31 +0000</pubDate>
				<category><![CDATA[一般程式]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Eclipse]]></category>
		<category><![CDATA[excel]]></category>
		<category><![CDATA[JExcelApi]]></category>
		<category><![CDATA[jxl]]></category>
		<guid isPermaLink="false">http://wazai.co.cc/?p=1569</guid>

					<description><![CDATA[<p>講到試算表，大家最熟悉的應該就是 Microsoft Office Excel 了吧！但其實大部分的人都只會基本的 Excel 操作及運算，Excel 其實有很多非常強大的功能，這篇文章其實不是教大家&#46;&#46;&#46;</p>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></description>
										<content:encoded><![CDATA[
<p>講到試算表，大家最熟悉的應該就是 Microsoft Office Excel 了吧！但其實大部分的人都只會基本的 Excel 操作及運算，Excel 其實有很多非常強大的功能，這篇文章其實不是教大家怎麼使用 Excel，小蛙也只會基本的操作，由於 Excel 所包含的強大功能，以致於現在有很多資料都是採用 Excel 儲存，像小蛙的其中一項工作就是把某些單位中的資料匯入到資料庫中，而某些單位提供給小蛙的資料就是 Excel，小蛙要做的事情就是必須先從 Excel 中把資料截取出來，才能做後續的操作以利於塞入特定資料庫中。這篇文章要介紹怎麼使用 Java 讀取 Excel 內容。 </p>



<span id="more-1569"></span>



<p>要在 Java 中操作 Excel 必須先下載<a rel="noreferrer noopener nofollow external" href="http://www.andykhan.com/jexcelapi/download.html" target="_blank" data-wpel-link="external" class="wpel-icon-right">Java Excel API<span class="wpel-icon wpel-image wpel-icon-6"></span></a>。這邊小蛙下載最新版的 JExecelApi v2.6.12。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-1.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-1.png" alt="jxl 1 Java + Excel = JXL" class="wp-image-1570" title="Java + Excel = JXL"></a></figure></div>



<p>下載到桌面後，我們只需要壓縮檔中的 jxl.jar 檔案，可以透過 WinRAR (WinZip or 7zip &#8230;等)解壓縮軟體取得 jxl.jar。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-2.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-2.png" alt="jxl 2 Java + Excel = JXL" class="wp-image-1571" title="Java + Excel = JXL"></a></figure></div>



<p>解壓縮後可以得到 jexcelapi，而我們要的 jxl.jar 在 jexcelapi 資料夾內。如果你的使用方式跟小蛙一樣，直接點兩下開啟 WinRAR 介面的話，就可以直接拖曳著 jxl.jar到桌面，而不用解壓縮整個檔案。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-3.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-3.png" alt="jxl 3 Java + Excel = JXL" class="wp-image-1572" title="Java + Excel = JXL"></a></figure></div>



<p>接下來要把這個 jar 檔放進專案中讓我們可以透過 Eclipse 使用，之前小蛙會將所有使用到的 Library 都放置在一個資料夾，讓不同專案可以去 include，但後來工讀生盛哥(組內最強)建議可以每個專案中都建立一個lib資料夾，裡面專門放置這個專案會用到的函式庫，雖然可能會造成空間浪費(同一個套件複製好幾份在不同專案中)，但到時候要維護或是打包之類的會方便許多。下圖是在專案中建立一個 Folder 的操作，在專案上按右鍵 -&gt; New -&gt; Folder。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-4.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-4.png" alt="jxl 4 Java + Excel = JXL" class="wp-image-1573" title="Java + Excel = JXL"></a></figure></div>



<p>輸入 Folder 名稱。</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-5.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-5.png" alt="jxl 5 Java + Excel = JXL" class="wp-image-1574" title="Java + Excel = JXL"></a></figure></div>



<p>就會出現在 Eclipse 介面中的專案裡了。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-6.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-6.png" alt="jxl 6 Java + Excel = JXL" class="wp-image-1575" title="Java + Excel = JXL"></a></figure></div>



<p>光是這樣 Eclipse 還沒辦法使用這個Jar的功能喔！接著我們要讓 Eclipse 可以&#8221;認得&#8221;這個 Jar。在剛剛的 jar 上面點選滑鼠右鍵，選擇 Build Path -&gt; Add to Build Path。</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-7.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-7.png" alt="jxl 7 Java + Excel = JXL" class="wp-image-1576" title="Java + Excel = JXL"></a></figure></div>



<p>上圖的 jxl.jar 變成下圖這個樣子，並且在 Referenced Libraries 中出現了一個 jxl.jar。</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-8.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-8.png" alt="jxl 8 Java + Excel = JXL" class="wp-image-1577" title="Java + Excel = JXL"></a></figure></div>



<p>接下來介紹 JXL 的使用方法。 </p>



<pre class="wp-block-preformatted wp-block-syntaxhighlighter-code">// 要注意如果檔案路徑中有「\」必須用「\\」或「/」取代掉
// 使用JXL必須先建立一個Workbook，讀取方法如下。
// 小蛙測試的時候 xlsx 的檔案會發生錯誤
Workbook workbook = Workbook.getWorkbook(new File("E:\\鄉鎮區中英文.xls"));
// 接著建立 Sheet，Workbook可以看成是一個excel檔案，Sheet顧名思義就是一個頁籤。
// 可以直接 getSheet(0) 表示第一個頁籤(從0開始算)
// 也可以透過 getSheet("頁籤名稱") 來取得頁籤
Sheet sheet = workbook.getSheet(0);
// 讀取儲存格(Cell)的方法，getCell(Columns, Rows)，也是一樣從0開始(直,橫)
Cell c = sheet.getCell(j, i); 
// 要一列一列往下讀的方式，印出每一行的內容
for(int i = 0; i &lt; sheet.getRows(); i++){
    for(int j = 0; j &lt; sheet.getColumns(); j++){
        Cell c = sheet.getCell(j, i);
        String s = c.getContents();
        System.out.println(s);
    }
    System.out.println("-------");
}</pre>



<p>這邊小蛙介紹一個 Eclipse 小技巧。把上面的程式貼在 Eclipse 裡面卻發現有紅色的底線，是 Eclipse 告訴開發者你這行程式有錯誤喔！並且提供貼心小建議，左邊有一個叉叉，點選滑鼠左鍵可以看到 Eclipse 給了幾個貼心的小建議，例如下圖 Eclipse 就告訴開發者可能是少 import java.io.File; &#8230; 等等，雖然不一定每次都會正確，這個便利的設計可以讓開發者少打一些字，也可以更快找出錯誤的原因。</p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-9.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-9-580x223.png" alt="jxl 9 Java + Excel = JXL" title="Java + Excel = JXL"></a></figure></div>



<p>下圖是必須做Exception判斷。 </p>



<div class="wp-block-image"><figure class="aligncenter"><a href="https://noter.tw/wp-content/uploads/2011/12/jxl-11.png" data-wpel-link="internal"><img decoding="async" src="https://noter.tw/wp-content/uploads/2011/12/jxl-11-580x250.png" alt="jxl 11 Java + Excel = JXL" class="wp-image-1580" title="Java + Excel = JXL"></a></figure></div>



<p><strong>Excel 相關文章：</strong></p>



<ul class="my-li bg-darkblue wp-block-list"><li><a href="https://noter.tw/9117/excel-filter-and-validation/" data-wpel-link="internal">加入篩選器及下拉選單 (資料驗證)</a></li><li><a href="https://noter.tw/9063/excel-auto-search-and-fill-data-by-vlookup-index-match/" data-wpel-link="internal">搜尋表格 填入資料 強大的 VLOOKUP, INDEX, MATCH</a></li><li><a href="https://noter.tw/9061/split-a-excel-to-files/" data-wpel-link="internal">分拆 Excel 成多個檔案 ( Split A Excel to Files)</a></li><li><a href="https://noter.tw/6550/excel-%e4%bd%bf%e7%94%a8-poi-%e8%ae%80%e5%8f%96%e6%96%87%e5%ad%97%e6%a0%bc%e5%bc%8f%e6%97%a5%e6%9c%9f%e5%8d%bb%e8%ae%8a%e6%88%90%e6%95%b8%e5%ad%97%e7%9a%84%e5%95%8f%e9%a1%8c/" data-wpel-link="internal">Excel 使用 POI 讀取文字格式日期卻變成數字的問題</a></li><li><a href="https://noter.tw/4300/java-%e8%ae%80%e5%8f%96-excel-%e6%96%87%e4%bb%b6xls-xlsx-%e4%bd%bf%e7%94%a8-apache-poi/" data-wpel-link="internal">Java 讀取 Excel 文件(xls, xlsx) – 使用 Apache POI</a></li><li><a href="https://noter.tw/2711/oracle-%e5%8c%af%e5%85%a5%e5%8c%af%e5%87%ba-excel-%e9%80%8f%e9%81%8e-sql-developer/" data-wpel-link="internal">Oracle 匯入/匯出 Excel (透過 SQL Developer)</a></li><li><a href="https://noter.tw/1732/jsp%e5%b0%87%e8%b3%87%e6%96%99%e5%8c%af%e5%87%ba%e6%88%90excel%e7%9b%b4%e6%8e%a5%e4%b8%8b%e8%bc%89-by-jexcelapi-jxl/" data-wpel-link="internal">JSP將資料匯出成Excel直接下載 by JExcelApi (jxl)</a></li><li><a href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a></li><li><a href="https://noter.tw/119/ncr-%e8%99%95%e7%90%86%e6%96%b9%e5%bc%8f%ef%bc%9ajava-vba/" data-wpel-link="internal">NCR &amp;#xxxxx; 處理方式：Java &amp; VBA</a></li></ul>
<p>這篇文章 <a rel="nofollow" href="https://noter.tw/1569/java-excel-jxl/" data-wpel-link="internal">Java + Excel = JXL</a> 最早出現於 <a rel="nofollow" href="https://noter.tw" data-wpel-link="internal">記下來</a>。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://noter.tw/1569/java-excel-jxl/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
