如何使用OpenXML获取Excel工作表的已使用范围?

时间:2017-04-13 12:10:47

标签: c# excel openxml openxml-sdk

我需要在新工作表中获取已使用的单元格范围。例如:

UsedRange

在Excel VBA中,可以通过恰当命名的public class FileStorageServiceWithRest { private static final String account = "<your_account_name>"; private static final String key = "<your_access_key>"; public static void main(String args[]) throws Exception{ String urlString = "http://" + account + ".file.core.windows.net/myshare/<your_file_name>"; HttpURLConnection connection = (HttpURLConnection)(new URL(urlString)).openConnection(); getFileRequest(connection, account, key); connection.connect(); System.out.println("Response message : "+connection.getResponseMessage()); System.out.println("Response code : "+connection.getResponseCode()); BufferedReader br = null; if(connection.getResponseCode() != 200){ br = new BufferedReader(new InputStreamReader((connection.getErrorStream()))); }else{ br = new BufferedReader(new InputStreamReader((connection.getInputStream()))); } System.out.println("Response body : "+br.readLine()); } public static void getFileRequest(HttpURLConnection request, String account, String key) throws Exception{ SimpleDateFormat fmt = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss"); fmt.setTimeZone(TimeZone.getTimeZone("GMT")); String date = fmt.format(Calendar.getInstance().getTime()) + " GMT"; String stringToSign = "GET\n" + "\n" // content encoding + "\n" // content language + "\n" // content length + "\n" // content md5 + "\n" // content type + "\n" // date + "\n" // if modified since + "\n" // if match + "\n" // if none match + "\n" // if unmodified since + "\n" // range + "x-ms-date:" + date + "\nx-ms-version:2014-02-14\n" //headers + "/"+account + request.getURL().getPath(); // resources System.out.println("stringToSign : "+stringToSign); String auth = getAuthenticationString(stringToSign); request.setRequestMethod("GET"); request.setRequestProperty("x-ms-date", date); request.setRequestProperty("x-ms-version", "2014-02-14"); request.setRequestProperty("Authorization", auth); } private static String getAuthenticationString(String stringToSign) throws Exception{ Mac mac = Mac.getInstance("HmacSHA256"); mac.init(new SecretKeySpec(Base64.decode(key), "HmacSHA256")); String authKey = new String(Base64.encode(mac.doFinal(stringToSign.getBytes("UTF-8")))); String auth = "SharedKey " + account + ":" + authKey; return auth; }} 属性获取。 OpenXML中是否存在等价物?

1 个答案:

答案 0 :(得分:1)

可以在SheetDimension类中找到它,它可以作为Worksheet的属性找到。以下代码将使用的范围写入控制台:

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(filename, false))
{
    WorkbookPart workbookPart = spreadsheetDocument.WorkbookPart;
    //get the correct sheet
    Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == "Sheet1").First();
    WorksheetPart worksheetPart = workbookPart.GetPartById(sheet.Id) as WorksheetPart;
    Console.WriteLine(worksheetPart.Worksheet.SheetDimension.Reference);
}