将Crystal报表导出到Excel-指定目录

时间:2018-08-30 14:09:21

标签: c# excel crystal-reports

我有我要提取的水晶报表(使用C#),并想导出到Excel。我设法拉出并导出报告就好了。但是在代码中,我手动指定了导出目录。

代码:

myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, "C:\\Temp\\ReportName.xls");

我知道路径必须是字符串值。我该如何问用户要将报告导出到何处(并为其命名),而不是手动在代码中指定路径?

我尝试将“ SaveFileDialog”与下面的代码一起使用,然后出现以下异常:“ 其他信息:不支持给定路径的格式。”。尽管我注意到未设置“文件名”框正下方的文件类型,并且没有任何类型可供选择,但这允许用户指定文件名。

SaveFileDialog browser = new SaveFileDialog();
string directoryPath = "";
ienter code here`f (browser.ShowDialog() == DialogResult.OK)
{
   directoryPath = browser.ToString(); // prints path
}
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, directoryPath);

如果我使用“ FolderBrowserDialog”,则会收到错误:“ 其他信息:拒绝访问路径'C:\ Directory'。”,我怀疑这是由于仅提供了一个目录路径,但没有文件名。

FolderBrowserDialog browser = new FolderBrowserDialog();
string directoryPath = "";

if (browser.ShowDialog() == DialogResult.OK)
{
    directoryPath = browser.SelectedPath; // prints path
}
myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, directoryPath);

如果我尝试以下操作,则不会出错,也不会保存任何文件:

FolderBrowserDialog browser = new FolderBrowserDialog();
string directoryPath = "";
string FileName = "ExcelExport.xls";
string Path = directoryPath + FileName;

if (browser.ShowDialog() == DialogResult.OK)
{
directoryPath = browser.SelectedPath; // prints path
}

myEquipCalRPT.ExportToDisk(ExportFormatType.Excel, Path);

此外,如何导出到.xlsx而不是.xls?我可以将路径中的扩展名指定为.xlsx,但是它不想打开。需要删除X才能使其正常工作。

1 个答案:

答案 0 :(得分:0)

我最终得到了这段代码,以正确获取路径,因为路径是通过“ System.Windows.Forms.SaveFileDialog:Title:,FileName:C:\ Temp \ test.xls” ,而不是使用所有对话框的“ C:\ Temp \ test.xls”

def get_scores(score,totalscore,checknumber):
loops = 0
for loops in range(0,6):
    checknumber = validatescore(checknumber)
    score[loops]=float(checknumber)

maxi = find_max(score)
mini = find_min(score)
totalscore = totalscore + calculate_score(score,totalscore,maxi,mini)

return score[loops],totalscore,checknumber

def find_min(score):
min = 100
for counter in range (0,len(score)):
    if score[counter] < min: 
        mini = score[counter]
    return mini

 def find_max(score):
    max = 100
     for counter in range (0,6):
        if score[counter] < max: 
            maxi = score[counter]
    return maxi

def calculate_score(score,totalscore,maxi,mini):
    for loops in range(0,6):
        totalscore = totalscore + score[loops]
    totalscore = totalscore - maxi - mini
    return totalscore,maxi,mini

def displaydetails (totalscore,maxi,mini):
    print("The competitor scored: ",totalscore, "The max was :",maxi," The min was :",mini)

def validatescore(checknumber):
    valid = False
    checknumber = 0
    print("Please enter the score of the competitor")
    checknumber = float(input())
    while valid == False:
        if checknumber < 0.0 or checknumber > 6.0:
            print("Invalid mark - please enter a whole number between 0.0 and 6.0")
            checknumber = float(input())
        else:
             valid = True
    return checknumber



totalscore = 0.0
score = [0.0] * 6
checknumber = 0.0


score,totalscore,checknumber = get_scores(score,totalscore,checknumber)

displaydetails(totalscore,maxi,mini)

然后,您可以使用以下几行之一来写入文件,具体取决于您选择使用哪种方式导出报告:

            SaveFileDialog browser = new SaveFileDialog();
            string directoryPath = "";
            if (browser.ShowDialog() == DialogResult.OK)
            {
                directoryPath = browser.FileName.ToString();
            }