I don't like spreadsheets. I like data sets and matrices. But I get data in Excel workbooks all the time, and it's a pain in the neck. This will never go away altogether, but if my Stata-using colleagues could be persuaded to quit sending me spreadsheets, that would at least cut down on the volume. I've tinkered with all kinds of ways to make data extraction from spreadsheets into Stata easier. This is the latest:

set mem 10m
set more off
set type double

local here "`c(pwd)'/"

// declare name and date of Excel file to read from
local xlsfile  "revised PriceIncr20080815-TargetTempl.xls"
local filedate "20081110"

// list the worksheets of interest
local sheets ""Move these data" "And these too""

// Extract data from Excel to Stata. Leave this part alone.
local sheetno: list sizeof sheets
forvalues i=1/`sheetno' {
   local k: word `i' of `sheets'
   local my_path     "`here'`xlsfile'"
   local my_sheet    "`k'"
   local source "Excel Files;DBQ=`my_path'"

   odbc load, dsn("`source'") table("`my_sheet'$")

   unab varz: _all
   foreach z in `varz' {
      local lower=lower("`z'")
      if "`lower'"!="`z'" {
         rename `z' `lower'

   save "`here'`k'`filedate'.dta", replace

Notice the c(pwd) function. It returns the path to the working directory. Essentially, the do-file above translates the worksheets listed in the local `sheets' into Stata files saved in the same directory as the do-file is in. The original Excel file may be in the same directory, as in this example, or it may be somewhere else. The `filedate' local is optional. Also optional, of course, is the loop that turns variable names to lower case. I just like mine that way.