擴充Excel Services編程架構(翻譯自MSDN)

來源:互聯網
上載者:User

摘要:Excel Services編程架構1.0擴充了Microsoft Office Excel 2007和Excel Services功能,使之與下列協同工作:MOSS列表,Excel Service查詢表,業務參考引用,SQL回複,以及使用者定義方法(UDFS)。

內容:
Excel Services 1.0 功能概述
建立一個使用者定義方法項目
Sharepoint列表
寫回SQL資料來源
業務參考引用
構建和配置一個UDF庫
結論
引用資源
概述
Excel Service的第一個版本,在MOSS中被使用到,提供了一個簡單但卻強大的架構,這個架構可以定製來滿足你的業務需求。可是,因為它是第一個版本,你可能會遇到一些關於版本1的技術和特徵的限制。這篇文章討論的時你怎樣能克服這些限制,以及怎樣擴充以下構建在Excel Service解決方案中的功能:
   對Sharepoint 列表的使用
   Excel Service查選表的使用
      建立業務參考引用
      與Microsoft Office Excel 2007用戶端應用程式相容的使用者定義方法開發
另外,本文還介紹了怎樣用SQL 回複的方式來進行更進一步的內建功能開發。

系統要求
   建立和運行案例代碼,你必須在你的電腦中安裝以下軟體:
      Microsoft Visual Studio 2005
      Excel 2007
      Office SharePoint Server 2007
1. 建立一個使用者定義方法項目
為了開始,你必須在Visual Studio中建立一個包含UDFS代碼的項目。
1) 啟動Visual Studio 2005。
2) 在File菜單,點擊New,然後點擊項目。
3) 在項目類型地區—建立項目對話方塊,選擇Windows項目,適用Visual C#代碼。
4) 在模板區,點擊類庫。
5) 重新命名項目,從ClassLibrary1 修改為XIUnlimitedUDFs。

配置你的項目
   在開始為一個UDFS類庫寫代碼前,你必須從以下幾個方面修改你的項目配置(這些將應用於任何你建立的UDFs項目):
•添加一個UDFS項目的必須引用
•從項目模板中移除不必要的代碼
•為類庫註冊一個強簽名

添加一個UDFS項目的必要引用
使用在Excel Service中的UDFS類庫必須引用Microsoft.Office.Excel.Server.Udf來聲明類庫屬性。因此,你必須添加這個類的引用,然後再進行如下步驟。
你還需要以下兩個命名空間:Microsoft.Win32以及Syetem.Runtime.InteropServices.

注意:之前的和後面的步驟,前提為類庫建立在一個安裝了Office SharePoint Server 2007的電腦上。你可以在以下磁碟路徑找到Microsoft.Office.Excel.Server.Udf.dll:\Program Files\Common Files\Microsoft Shared\Web server extensions\12\ISAPI.

為項目添加一個引用
1. 在項目菜單上,點擊添加引用
     注意:你可以在解決方案視圖通過右鍵點擊引用來開啟添加引用對話方塊,然後選擇添加引用。
2. 在添加引用對話方塊中,在.NET選項卡,選擇Excel Service UDF Ftamework.
3. 點擊確定。

從項目模板中移除不必要的代碼
當你建立類庫項目時,Class1.cs檔案包含著預設被產生的一些代碼。
1) 將Class1.cs檔案重新命名為XIUnlimitedUDFs.cs.
2) 在XIUnlimitedUDFs類中,用以下代碼取代預設產生的所有代碼:
C#
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;    // Client Compat.
using Microsoft.Win32;             // Client Compat.
using Microsoft.Office.Excel.Server.Udf;
namespace XlUnlimitedUDFs
{
[UdfClass]
[Guid(XlUnlimitedUDFs.ClsId)] // Client Compat.
[ProgId(XlUnlimitedUDFs.ProgId)] // Client Compat.
[ClassInterface(ClassInterfaceType.AutoDual)] // Client Compat.
[ComVisible(true)] // Client Compat.
public class XlUnlimitedUDFs
{
// BEGIN CLIENT COMPAT. SECTION //
const string ClsId = "FE6C8D4D-3600-499a-9FA5-F8E252328CDD";
const string ProgId = "XlUnlimitedUDFs.XlUnlimitedUDFs";
[ComRegisterFunction]
public static void RegisterFunction(Type type)
{
if (typeof(XlUnlimitedUDFs) != type)
{
return;
}
RegistryKey key = Registry.ClassesRoot.CreateSubKey(
@"CLSID\{" +
ClsId +
@"}\Programmable");
key.Close();
}
[ComUnregisterFunction]
public static void UnregisterFunction(Type type)
{
if (typeof(XlUnlimitedUDFs) != type)
{
return;
}
Registry.ClassesRoot.DeleteSubKey(@"CLSID\{" +
ClsId +
@"}\Programmable");
}
// END CLIENT COMPAT. SECTION //
// BEGIN UDF SECTION //
// END UDF SECTION//
}
}
注意:在之前的範例程式碼中給出的ClsId僅僅是一個例子。如果需要,你可以通過選擇從工具菜單中建立GUID來產生一個ClsId。以”//Client Compat”結尾的程式碼和”CLIENT COMPAT.SECTION”是可選得;如果你想在Excel 2007中運行這些代碼,它們才是必須的。

為你的程式集添加一個強命名
1. 在解決方案視圖中,右鍵點擊XIUnlimitedUDFs項目,然後選擇屬性。
2. 在標記選項中,選擇標記程式集框。
 在選擇一個強命名Key檔案清單中,選擇建立。
1. 輸入keypair作為檔案名稱,然後清除使用密碼保護我的Key檔案選項。
2. 儲存你的項目。
SharePoint 列表
   現在你已經完成了配置你的項目,你可以寫實現UDF的代碼,這些代碼能被基於Excel Service的Excel 2007業務手冊所調用。通過這種方式,你可以擴充Excel Services的功能,例如使用SharePoint列表,執行SQL寫回,以及添加外部業務引用。
   當你寫一個被基於Excel Services的Excel 2007業務手冊的UDF時,一個通常的要求是,它必須類比包含UDF調用的業務手冊的目前使用者。一個需要類比登陸的例子就是如果你寫的代碼需要讀取SharePoint列表。在這種情況下,你必須使用有許可權訪問這些資料的使用者來登陸。以下部分描述了怎樣通過寫代碼來類比Excel Services使用者。
   類比ExcelServices 使用者
   你必須執行兩個簡單的步驟來類比當前Excel Services的使用者,如下所述:
       為了類比Excel Services 使用者,
1. 向UDF方法中標記以下中繼資料
C#
[UdfMethod(ReturnsPersonalInformation = true)]
注意:處於安全的原因,如果UDF方法不包含這個登陸使用者身份對象的中繼資料,Excel Services不會允許。
2. 在XIUnlimitedUDFs.cs檔案的頂部,添加如下引用:
using System.Security.Principal;
3. 實現一個helper方法來執行類比
/// <summary>
/// Returns the WindowsImpersonationContext of the current user.
///</summary>
private WindowsImpersonationContext impersonateUser()
{
WindowsIdentity wi = null;
try
{
// BEGIN CLIENT COMPAT. SECTION
// Check if code is not running on the server.
// If true, then it is running through a COM interface
// on the client and should not be impersonated.
if (System.Diagnostics.Process.GetCurrentProcess()
.ProcessName == "EXCEL")
{
// COM case (client-only), should not impersonate.
return null;
}
// END CLIENT COMPAT. SECTION
// Get identity of user who loaded the workbook.
wi = (WindowsIdentity)
System.Threading.Thread.CurrentPrincipal.Identity;
}
catch (System.Exception ex)
{
throw new InvalidOperationException(
"An error has occurred.");
}
// Impersonate user and return the context.
return wi.Impersonate();
}
4. 在一個Using鎖中調用這個方法來確保WindowsImpersonationContext對象的正確處置。
[UdfMethod(ReturnsPersonalInformation = true)]
public void sampleUDF()
{
// Begin user impersonation through helper function.
using (WindowsImpersonationContext wiContext =
impersonateUser())
{
// Any code in this block impersonates the user.
}
// No longer impersonating the user.
}
寫一個UDF來訪問SharePoint列表
Excel Services通常不支援對SharePoint的串連。儘管如此,它仍然可以通過UDF從SharePoint 列表中取得資料賦入Excel 2007業務手冊中。UDF調用Windows SharePoint Services API來取得列表資料,並將它們以對象數組的形式返回給業務手冊(通過使用CTRL+SHIFT+ENTER來將作為數組形式的UDF調用加入到Excel 2007中)。
為了能通過UDF從SharePoint列表中取得資料到Excel2007業務手冊中,你必須首先添加對Windows SharePoint Services API的引用,如下所述:
添加一個引用到項目中
1. 在項目菜單上,點擊添加引用
 注意:你也可以通過在解決方案視圖中右鍵點擊引用來開啟添加引用對話窗,然後選擇添加引用。
2. 在添加引用對話方塊中,在.NET選項卡上,選擇Windows SharePoint Services.
3. 點擊確定
注意:以上的步驟是假定你的類庫建立在一台安裝了Office SharePoint Server 2007的電腦上。你可以在磁碟路徑\Program Files\Common Files\Microsoft Shared\Web server extensions\12\ISAPI找到Microsoft.SharePoint.dll.
4. 在XIUnlimitedUDFs.cs檔案的頂部,添加如下引用
using Microsoft.SharePoint;
為了寫一個UDF來訪問SharePoint列表
• 向XIUnlimitedUDFs.cs中添加如下方法
/// <summary>
/// Using SharePoint API to read data from a
/// SharePoint list and return it as an object array.
/// </summary>
/// <param name="serverName">Server name.</param>
/// <param name="siteName">SharePoint site name.</param>
/// <param name="listName">SharePoint list name.</param>
/// <param name="viewName">View name of the SharePoint list.</param>
/// <param name="getTitles">Include column titles.</param>
/// <returns>Two-dimensional object array of list values.</returns>
[UdfMethod(IsVolatile = true, ReturnsPersonalInformation = true)]
public object[,] getSharepointView(string serverName,
string siteName,
string listName,
string viewName,
bool getTitles)
{
object[,] toExcel = null;
// Impersonate current user viewing Excel Web Access.
using (WindowsImpersonationContext wiContext = impersonateUser())
{
SPSite site = null;
try
{
// Get Sharepoint objects.
site = new SPSite(serverName);
SPList list = site.AllWebs[siteName].Lists[listName];
SPView view = list.Views[viewName];
// Grab collection of Sharepoint list values.
SPListItemCollection values =
list.GetItems(new SPQuery(view));
// Add a row for the titles if requested.
int titleRow = getTitles? 1 : 0;
int totalRows = values.Count + titleRow;
// Avoid two-dimensional arrays with only
// one-dimensional of data
// by adding an empty row if needed.
if (totalRows == 1)
totalRows++;
// Create an object array to return to Excel.
toExcel = new object[totalRows, view.ViewFields.Count];
// Add column titles to array if needed.
if (getTitles)
{
for (int i = 0; i < view.ViewFields.Count; i++)
{
toExcel[0, i] = list.Fields.
GetFieldByInternalName(view.ViewFields[i]).Title;
}
}
int j = titleRow;
// Iterate through SPListItems in the view.
foreach (SPListItem currVal in values)
{
// Add every field value of current item to array.
for (int i = 0; i < view.ViewFields.Count; i++)
{
// Get current field.
SPField field = currVal.Fields.
GetFieldByInternalName(view.ViewFields[i]);
// Get field value as a text string.
toExcel[j, i] = field.GetFieldValueAsText(
currVal[field.Id]);
}
j++;
}
}
catch(System.Exception ex)
{
object[,] error = new object[1, 1];
error[0,0] = "An error has occurred.";
toExcel = error;
}
finally
{
// Dispose of SharePoint objects instead of
// relying on the common language runtime.
if (site != null)
site.Dispose();
}
} // End impersonation.
return toExcel;
}
在一個Excel Services的查詢表中查看資料
  當你用SharePoint列表資料連線來執行一次查詢的時候,查詢表對展示你返回的關係資料非常有用。在這個版本中,Excel Services不支援查詢表,但是你可以通過一個工作區來實現查詢表的支援的大部分功能。在之前的樣本中(以及在與本文一起下載的範例程式碼中包含的樣本業務手冊),當你用數組的形式將資料插入到Excel 2007中,一個結構上與查詢表類似的資料數組就被返回,除了排序及篩選功能。將這種數組格式轉換為一個假的查詢表是非常簡單的(查看下載的樣本業務手冊)。以下步驟示範了怎樣做到這些。

在Excel Services中仿效一個查詢表
1. 有數組格式的UDF資料,例如上面的SharePoint 列表UDF樣本。
2. 通過以下步驟在同一個工作表中建立一個表。
1. 選擇一個和數組格式行數相同列數多一的地區
2. 按CTRL+T.
3. 標記正確的列索引
4. 以恰當的順序,將數組格式佔據的行填充到正確的列中,也就是說,從最小行到最大行。
  注意:因為在業務手冊中數組格式通過B7:D12排列定位,所以用以下數值:7,8,9,10,11,12來填充Index列。(你可能想跳過7,因為這行是你可能不想在表中包含欄位標題。)
5. 在頂端左側的表單元中輸入以下公式,然後將它粘貼到其它單元中。
=IFERROR(INDIRECT("R" & Table1[[#This Row],[INDEX]] & "C" & COLUMN(<TopLeftMostCellofArrayFormula>), FALSE), "")
注意:在上面的格式中,用你的數組格式的頂端左側單元來取代<TopLeftMostCellofArrayFormula>,在樣本業務手冊中,它是B7.( 你可能想使用B8替換,因為在數組格式的頂端左側單元中是你可能不想在表中包含欄位標題。)
在第五步中輸入的公式執行了以下的功能:
• 為數組格式的每一個儲存格建立了一個R1C1文本引用。
• 通過傷上面建立的文本引用間接的訪問那些儲存格中的資料。
• 通過一個IFERROR方法來封裝資料,將在空的數組格式儲存格中看到的#N/A轉化為一個空的字串。
寫回SQL 資料庫
通過與在Excel 2007的用戶端VB代碼託管的一個通常要求是能寫回到SQl 資料庫中,也能從之都取資料。這個功能在伺服器端更加有用。例如,你可能會想在特定情況下不同的Excel Services sessions能共用和操作同樣的資料。因為每一個session都有它自己的業務手冊版本,所以不能簡單的通過在Excel Services中共用業務手冊並編輯一個單元再映射到其它sessions來實現。要實現這個情況,你可以在SQL 資料庫中儲存資料,然後通過UDFS讀/寫它。這樣就能讓你在不同的sesions之間共用資料。
建立一個UDF來寫入SQL 資料庫
利用內建在.Net Framework的SQL處理能力,建立一個寫入SQL 資料庫的UDF並不複雜。以下的步驟示範了怎樣建立這個UDF.
1. 在XIUnilimitedUDFs.cs檔案的頂部,添加如下引用:
using System.Data.SqlClient;

2. 向你的UDF類中添加以下方法
警告:我們提供的以下代碼僅僅作為一個樣本。由於有可能會產生插入約束,所以一定要注意代碼在何時訪問資料庫。如果可以,限制以下的代碼為僅接受在解決方案中需要的列表資料,不要使用限制逗號的字串。查看更多資訊,請參閱SQL約束。儘管以下的代碼有這些實用建議,在大多數情況下它仍然比要求的更具有可擴充性。你可以通過移除一些可擴充性來使這些代碼更加健壯安全。
/// <summary>
/// Write data to a SQL database.
/// </summary>
/// <param name="serverName">SQL Server name.</param>
/// <param name="databaseName">Database name.</param>
/// <param name="tableName">Table name.</param>
/// <param name="columnNames">Column names (comma separated).</param>
/// <param name="values">Values (comma separated).</param>
/// <returns>Status string.</returns>
[UdfMethod(IsVolatile = true, ReturnsPersonalInformation = true)]
public string writeToSql(string serverName,
string databaseName,
string tableName,
string columnNames, // Comma delimited.
string values) // Comma delimited.
{
String[] restricted = { ";", "--", "/*", "*/", "xp_" };
String[] checkRestriction = { tableName, columnNames, values };
string returnVal;
// Be restrictive about accepted inputs.
foreach (String currCheck in checkRestriction)
{
foreach (String currRestricted in restricted)
{
if (currCheck.Contains(currRestricted))
{
return "An error has occurred";
}
}
}
// Escape quotes.
tableName = tableName.Replace("\'", "\'\'");
columnNames = columnNames.Replace("\'", "\'\'");
columnNames = columnNames.Replace("\"", "\"\"");
values = values.Replace("\'", "\'\'");
// Impersonate current user.
// (see earlier section on user impersonation)
using (WindowsImpersonationContext wiContext = impersonateUser())
{
SqlConnection connection = null;
SqlCommand command = null;
try
{
// Build connection string.
string connectionString =
"Integrated Security=SSPI;" +
"Persist Security Info=True;Initial Catalog=" +
databaseName +
";Data Source=" +
serverName +
";";
// Connect to SQL database.
connection = new SqlConnection(connectionString);
connection.Open();
// Use sp_executesql to avoid SQL injection attacks.
command = new SqlCommand("sp_executesql", connection);
command.CommandType =
System.Data.CommandType.StoredProcedure;
// Comma-separated string of values from parameter.
string rowValues = "\'" +
values.Replace(",", "\',\'") +
"\'";
// Comma-separated string of values from parameter.
string columnValues = "\"" +
columnNames.Replace(",", "\",\"") +
"\"";
// Prepare statement to insert row in SQL database.
string parameter = "insert into " +
tableName +
" (" +
columnValues +
")" +
" values (" +
rowValues +
")";
// Execute command.
command.Parameters.AddWithValue("@statement", parameter);
command.ExecuteNonQuery();
// Close connection.
connection.Close();
returnValue = "Success!"
}
catch (System.Exception ex)
{
returnValue = "An error has occurred.";
}
finally
{
// Dispose of SQL objects instead of
// relying on the common language runtime.
if (connection != null)
connection.Dispose();
if (command != null)
command.Dispose();
}
} // End impersonation.
return returnValue;
}
外部業務引用
Excel Services不支援載入具有外部參考的業務手冊。你可以通過使用Excel Web Services API取得外部業務手冊中的特定單元裡的資料而不是直接引用外部業務手冊,來克服這個限制。
為了實現這個功能,你必須引用Excel Web Services API,寫一個UDF來調用業務手冊,並從它的單元裡取得資料。
注意:獲得更多的關於Excel Web Services API的資訊,請參閱Excel Web Services.
引用Excel Web Services API
    要向Excel Web Services添加一個引用,你必須安裝在你的伺服器上安裝Office SharePoint Server 2007。然後,從以下位置添加一個對Excel Web Services API的引用:http://server/_vti_bin/excelservice.asmx?WSDL,其中server是你伺服器的名字。
向Excel Web Services添加一個Web引用。
1. 在項目菜單中,點擊添加Web引用。
注意:你可以通過在解決方案視圖中右肩點擊引用選擇添加Web引用來開啟對話方塊。
2. 在添加外部參考對話方塊中,在URL地區,輸入http://server/_vti_bin/excelservice.asmx?WSDL.
注意:用你伺服器的名字來取代server.
3. 點擊下一步。
4. 將Web引用名字改為ExcelServices.
5. 點擊添加引用。

寫一個引用外部業務手冊的UDF
  以下代碼示範了你怎樣通過使用UDF調用Excel Web Services API來開啟一個儲存在信任的位置的外部業務手冊,並返回引用的資料。
/// <summary>
/// Using the Excel Services user-defined functions API
/// to read data from an external workbook
/// and return it as an object.
/// </summary>
/// <param name="workbookPath">Path to the workbook.</param>
/// <param name="sheetName">Sheet name.</param>
/// <param name="range">Sheet range.</param>
/// <returns>Object containing cell contents.</returns>
[UdfMethod(IsVolatile = true, ReturnsPersonalInformation = true)]
public object externalRef(string workbookPath,
string sheetName,
string range)
{
ExcelServices.Status[] status = null;
string sessionId = null;
object cellValue = null;
// Initialize Excel Web Services.
ExcelServices.ExcelService es = new
ExcelServices.ExcelService();
es.UseDefaultCredentials = true;
// Impersonate the current user viewing Excel Web Access.
using (WindowsImpersonationContext wiContext =
impersonateUser())
{
// Open the workbook – this loads the workbook
// that was saved to the SharePoint document library
// and returns a sessionId to use in API calls.
try
{
sessionId = es.OpenWorkbook(workbookPath,
"en-US",
"en-US",
out status);
// Retrieve the data from the referenced cell.
cellValue = es.GetCellA1(sessionId,
sheetName,
range,
true,
out status);
}
catch (System.Exception ex)
{
return "An error has occurred.";
}
}
return cellValue;
}
運行並發布你的UDF庫
  你可以在下載的樣本中找到先前建立的調用了UDFs的樣本業務手冊,以及完整的XIUnlimitedUDFs Visual Studio專案檔。獲得更多關於怎樣運行並發布UDF程式集到Excel Services,參閱Excel Services User-Defined Functions.
注意:如果你使用XIUnlimitedUDFs Visual Studio項目,你必須用你的伺服器替代所有的http://%3cserver/>引用。這個項目也包含了一個Web引用,你必須使用對你的伺服器的正確引用來替代它。

在Excel 用戶端發布UDF程式集
   在Excel 2007用戶端使用你的UDFs而在伺服器運行Excel Services是非常有用的。不僅在用戶端你能得到UDFs暴露出來的功能,而且可以建立一個使用UDFs的業務手冊,通常當調用未知格式時候我們會看到# NAME?錯誤,而在使用UDFs的業務手冊中我們能看到真正的資料。
在本文中使用的代碼有類似//Client Compat和CLIENT COMPAT.SECTION的注釋。這些注釋指出了要讓你的UDF代碼工作在用戶端上而要求的程式碼。如果你是逐字拷貝了這些代碼,或者使用XIUnlimitedUDFs樣本Visual Studio項目,在將UDFs使用在用戶端你還必須執行一些剩餘的步驟。
注意:獲得更多關於在Excel用戶端使用Excel Services UDFs的資訊,參閱Making Excel Services UDFs work on Excel 2007 - Part 1 和Making Excel Services
UDFs work on Excel 2007 - Part 2.

讓UDF代碼運行在Excel用戶端
1. 使用本文中的代碼,並確認包含了標記了CLIENT COMPAT的所有部分。
2. 在解決方案視圖中,右鍵點擊XIUnlimitedUDFs項目,然後選擇屬性。
3. 在產生選項卡中,選擇為COM interop產生註冊。
注意:另外一個選擇是,如果你要發布的電腦與你產生的電腦不同,你可以轉移產生的XIUnlimitedUDfs.dll檔案,並使用包含.Net Framework的RegAsm工具來註冊它。
4. 儲存你的項目,然後產生它。
5. 開啟Excel 2007,從Office按鈕上,選擇Excel .
6. 在Add-Ins選項卡上,點擊下一步,然後點擊自動。
7. 找到並選擇XIUnlimitedUDFs.XIUnlimitedUDFs作為自動的伺服器,然後點擊確定。
8. 如果你收到關於mscoree.dll的警告,選擇不,然後再Add-Ins對話方塊中點擊確定。
注意:使用一個具有控制碼的附加功能塊是被推薦的。關於更多資訊,參閱
Isolating Microsoft Office Extensions with the COM Shim
Wizard Version 2.0.
9. 開啟一個包含UDF調用的業務手冊,或者建立一個。
結論
通過這篇文章,你學到了怎樣在Excel Services中通過使用編程架構來克服版本1中的一些限制,並擴充了Excel Services預設實現的功能。你也可以使用同樣的架構類庫建立滿足你特定業務需求的解決方案。強大的Excel Services架構類庫和API使你能夠方便的將Excel Services擴充成一個業務手冊發布中心及稱為一個解決方案平台。
關於作者
Luis F.Bitencourt-Emilio是Excel Services測試組裡的設計工程師。他的部落格是LuisBE on Services。

引用資源
獲得更多資訊,請參閱以下資源:
Data-Type Handling with Excel Services User-Defined Functions
● Developing User-Defined Functions for Excel 2007 and Excel Services
● Creating Custom Solutions with Excel Service
● Excel Services User-Defined Functions
● Excel Services Technical Overview
● Data-Type Handling with Excel Services User-Defined Functions
● Using Excel Web Services in a SharePoint Web Part
● Deploying and Optimizing a SharePoint Web Part That Calls Excel Web Services.
● Microsoft Office Developer Center: Excel Developer Portal
● Microsoft Office Developer Center: SharePoint Server 2007 Developer Portal
● Blog: LuisBE on Services
● Blog: Microsoft Excel 2007 and Excel Services
● Blog: Cum Grano Salis

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.